强制GNU链接器生成32位ELF可执行文件

26

你好,我正在为自己编写的编译器生成x86汇编代码,但在64位虚拟机上链接文件时遇到了一些问题(汇编代码是32位的)。

我使用以下命令可以成功地组装目标文件:

as --32 mult.S -o mult.o

但是我似乎找不到任何选项可以使ld生成一个32位的ELF文件:

ld <some-option?> mult.o -o mult

任何帮助都将是非常好的。

1个回答

39

ld <some-option?> mult.o -o mult

ld -m elf_i386 mult.o -o mult

您可以使用以下命令获取可用架构列表:
ld -V

示例输出:

GNU ld (GNU Binutils for Ubuntu) 2.24
  Supported emulations:
   elf_x86_64
   elf32_x86_64
   elf_i386
   i386linux
   elf_l1om
   elf_k1om
   i386pep
   i386pe

然而,这并不是必要的:ld会查看第一个对象,并根据该对象的格式自动选择仿真。

1
谢谢,其实我几分钟前刚自己发现了。我本来希望 ld 能做这件事情,但由于某种原因它仍然提示我有不匹配的架构。 - Hunter McMillen
有人可以解释一下像 elf32_x86_64i386linuxelf_l1om 这样的难点吗? - Ciro Santilli OurBigBook.com
我可以问一下,elf_i386是什么意思吗?我在手册中搜索了一下,但没有找到相关信息。 - paradox
对于 Linux 系统,需要 ELF 类型,i386 代表 Intel 80386,因此在 intel x86 上应使用 -m elf_i386。因此,我认为它应该与 GCC 中的 -m32 所做的相同。 - christopher westburry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接