2013-04-14 63 views
11

您好我目前正在编写我编写的编译器生成x86程序集,并且在我的64位VM(汇编代码为32位)上链接文件时遇到了一些问题。强制GNU链接器生成32位ELF可执行文件

我可以用这个命令来组装对象文件罚款:

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

,但我似乎无法找到ld,使其产生一个32位的ELF文件的任何选项:

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

任何帮助将是伟大的。

回答

19

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 l ooks在第一个对象上,并且应该根据该对象的格式自动选择仿真。

+1

谢谢,实际上我几分钟前就发现了这个。我曾希望这是'ld'能做的,但由于某种原因,它仍然说我有一个不匹配的架构。 –

+0

saomeone能解释像“elf32_x86_64”和“i386linux”,“elf_l1om”这样的硬盘吗? –

+0

我可以问你elf_i386是做什么的?我通过手册搜索,但无法找到它 – paradox

相关问题