首页 > 代码库 > 在64位linux上编译32位程序

在64位linux上编译32位程序

ld指令有一个选项:--oformat output_format,用于指定输出文件的格式。输入文件./kernel/kernel.o等是elf32格式,当前系统是64位,而ld默认生成的文件格式是elf64-x86-64;因此会出现“ld: warning: i386 architecture of input file `./kernel/kernel.o‘ is incompatible with i386:x86-64 output”这样的提示。之前,将系统从三墩转移到我自己的ubuntu电脑上时,我加入了--oformat elf32-i386选项,解决了这个问题。

但是今天在amd64位机器、centos系统上编译系统时,又出现如下提示:
 ld: warning: i386 architecture of input file `./kernel/kernel.o‘ is incompatible with i386:x86-64 output
.......
所有.o文件都出现类似错误。因此推断,当前系统的ld指令不支持--oformat elf32-i386选项。

ld指令还有一个选项-memulation,简写-m。说明文档如下:
-memulation
           Emulate the emulation linker.  You can list the available emulations  with  the
           --verbose or -V options.

           If  the  -m  option  is not used, the emulation is taken from the "LDEMULATION"
           environment variable, if that is defined.

           Otherwise, the default emulation depends upon how the linker was configured.
即,这个选项可以模拟其他平台上的ld链接器。使用-m elf_i386可以模拟32位平台上ld指令。改写makefile之后,"make"无以上的warning提示,系统运行也恢复正常。
参考http://blog.csdn.net/galaft/archive/2010/01/13/5184984.aspx