码迷,mamicode.com
首页 > 系统相关 > 详细

在64位linux上编译32位程序

时间:2014-06-03 00:37:43      阅读:668      评论:0      收藏:0      [点我收藏+]

标签:linux   64位   ld   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提示,系统运行也恢复正常。

在64位linux上编译32位程序,布布扣,bubuko.com

在64位linux上编译32位程序

标签:linux   64位   ld   32位   

原文地址:http://blog.csdn.net/simanstar/article/details/27677951

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!