2013-04-14 91 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

相關問題