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位程序,古老的榕树,5-wow.com