我写了一个组装的程序集:
$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 位二进制文件?
最佳答案
您的链接器正在尝试创建 64 位二进制文件,但您的汇编代码是为 32 位体系结构组装的。这会造成不匹配。
通过传递 -m elf_i386
解决此问题标记到您的链接器,明确指示它创建一个 32 位二进制文件。
关于assembly - 在 64 位平台上使用 ld 生成 32 位可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30184929/