2013-04-14 2 views
11

Привет Я в настоящее время создаю сборку x86 для компилятора, который я пишу, и у меня возникли проблемы с связыванием файла на моей 64-разрядной виртуальной машине (код сборки 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

Смежные вопросы