在64位平台上使用ld生成32位可执行文件

时间:2015-05-12 07:55:38

标签: assembly x86 x86-64 ld

我写了一个装配的程序集:

$as --32 -o hello.o hello.s

然后我尝试使用以下命令生成可执行文件:

$ld -o hello hello.o

它给了我一个错误:

ld: i386 architecture of input file `ConditionalBranching.o' is incompatible with i386:x86-64 output

我尝试使用标志-m32或--32,但是ld不接受它们。我通过阅读ld的手册页找不到解决方案。如何从32位共享对象生成32位二进制文​​件?

1 个答案:

答案 0 :(得分:2)

您的链接器正在尝试创建64位二进制文​​件,但您的汇编代码是为32位体系结构组装的。这造成了不匹配。

通过将-m elf_i386标志传递给链接器,明确指示它创建一个32位二进制文​​件来解决此问题。