2013-04-14 10 views
11

Witam Obecnie generuję zestaw x86 dla kompilatora, który piszę i mam pewne problemy z łączeniem pliku na mojej 64-bitowej maszynie wirtualnej (kod zespołu to 32-bitowy kod).Wymuś linker GNU do wygenerowania 32-bitowych plików wykonywalnych ELF

udało mi się zebrać pliku obiektu grzywny z tym poleceniem:

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

ale nie mogę wydawać się znaleźć żadnych opcji ld które czynią go wygenerować 32-bitowy plik ELF:

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

Każda pomoc będzie świetna.

Odpowiedz

19

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

ld -m elf_i386 mult.o -o mult 

Można uzyskać listę dostępnych architektur z:

ld -V 

próbki wyjściowe:

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 

jednak, że nie powinno być konieczne: ld l ooks na pierwszym obiekcie i powinien automatycznie wybrać emulację w oparciu o format tego obiektu.

+1

Dziękuję, właściwie to znalazłem to kilka minut temu. Miałem nadzieję, że to właśnie zrobi "ld", ale z jakiegoś powodu nadal powiedział, że mam niedopasowaną architekturę. –

+0

Czy Saomeone może wyjaśnić te trudne, takie jak 'elf32_x86_64' i' i386linux', 'elf_l1om'? –

+0

Czy mogę zapytać, co robi elf_i386? Przeszukałem podręcznik, ale nie mogłem go znaleźć – paradox

Powiązane problemy