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

drd*_*dot 5 x86 assembly x86-64 ld

我编写了一个程序集,该程序集与:

$as --32 -o hello.o hello.s
Run Code Online (Sandbox Code Playgroud)

然后,我尝试生成具有以下内容的可执行文件:

$ld -o hello hello.o
Run Code Online (Sandbox Code Playgroud)

它给我一个错误:

ld: i386 architecture of input file `ConditionalBranching.o' is incompatible with i386:x86-64 output
Run Code Online (Sandbox Code Playgroud)

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

Cod*_*ray 7

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

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