2013-04-14 2 views
11

Hi Ich erstelle derzeit x86-Assembly für einen Compiler, den ich schreibe, und habe Probleme beim Verknüpfen der Datei auf meiner 64-Bit-VM (der Assemblercode ist 32 Bit).Erzwinge GNU-Linker zum Generieren von ausführbaren 32-Bit-ELF-Dateien

Ich konnte die Objektdatei in Ordnung mit diesem Befehl montieren:

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

aber ich scheine für ld alle Optionen zu finden, nicht, dass es eine 32-Bit-ELF-Datei machen erzeugen:

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

Jede Hilfe wäre toll.

Antwort

19

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

ld -m elf_i386 mult.o -o mult 

Sie können mit einer Liste von verfügbaren Architekturen erhalten:

ld -V 

Beispielausgabe:

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 

Dies sollte jedoch nicht sein notwendig: ld l Ooks beim ersten Objekt und sollte automatisch die Emulation basierend auf dem Format des Objekts auswählen.

+1

Danke, ich habe das gerade selbst vor ein paar Minuten gefunden. Ich hatte gehofft, dass das "ld" tun würde, aber aus irgendeinem Grund sagte es immer noch, dass ich eine unpassende Architektur habe. –

+0

Kann man die Harten wie 'elf32_x86_64' und' i386linux', 'elf_l1om' erklären? –

+0

kann ich dich fragen was macht elf_i386? Ich habe das Handbuch durchsucht, konnte es aber nicht finden – paradox

Verwandte Themen