由于现在使用的系统大多是64位系统,但是做作业有时候需要使用到32位的程序。故写一篇博客备忘。
编译
写C程序的时候不会突出用的是32位还是64位,因此C语言最终编译成.o代码的时候要给编译器指定参数来编译出32位目标代码。
gcc -c -m32 hello.c
如果源代码文件中引用了库文件,则要注意此64位系统上已经安装了必要的32位程序库,否则将编译失败。安装:
sudo apt-get install gcc-multilib
NASM汇编
NASM语言编写.asm汇编文件的时候就要根据32位或者64位来确定使用寄存器的名称了。如果汇编文件是使用32位格式来写的,在64位系统上也可以汇编成32bit的目标文件。使用如下命令:
nasm -f elf -o hello.o hello.asm
链接
将多个目标文件,以及库文件进行链接的时候,如果要链接形成32位可执行程序需要用参数指定:
ld -m elf_i386 -o app hello.o try.o