2011-11-28 11 views
7

Come si genera un formato di file a.out con gcc su architetture x86?generazione del formato di file a.out con gcc

Con nasm posso farlo facilmente con -f la bandiera, per esempio:

[[email protected]]$ nasm -f aout start.asm 
[[email protected]]$ objdump -a start.o 

start.o:  file format a.out-i386-linux 
start.o 

[[email protected]]$ 

su Linux, la compilazione dei file .c produce un oggetto elfo. Come posso produrre file a.out con gcc?

+0

Quale sistema stai utilizzando? Non credo che Linux supporti più gli eseguibili di a.out. Non so sui file di oggetti intermedi. –

+0

Credo che il kernel possa essere configurato con un supporto a.out, ma che sia disattivato per impostazione predefinita. È passato un po 'di tempo da quando ho compilato un kernel, che potrebbe non essere più così. – goldfire

+0

Linux lo supporta se 'CONFIG_BINFMT_AOUT' è abilitato in fase di compilazione. –

risposta

11

Per generare il formato a.out con gcc, il linker deve essere informato di farlo. Puoi farlo passando i flag da gcc grazie al flag -Wl.

Ecco quello che si potrebbe fare per il formato a.out:

gcc -Wl,--oformat=a.out-i386-linux file.c -o file.out 

È inoltre possibile visualizzare tutti i formati supportati digitando:

objdump -i 
+0

il problema è che ho molti file oggetto (.o) che sono in formato elf, quindi quando li linko con OUTPUT_FORMAT (a.out-i386-linux) parametro nello script linker ottengo questo errore: "impossibile rappresenta la sezione '.comment 'nel formato di file oggetto a.out". Questo è il motivo per cui ho bisogno che "gcc -c file.c" sia compilato dall'inizio in formato a.out e non in ELF. – Nulik

+0

Ho trovato la soluzione a quanto sopra, con l'opzione -fno-ident la sezione .comment non è stata generata, ho avviato il mio kernel a.out con grub. grazie – Nulik

+0

Scusa se ho perso il tuo primo commento, e sono felice che tu abbia trovato la soluzione da soli :) –

0

Ci sono due risposte a questa domanda. Uno è che dovrai compilare un nuovo GCC con aout come target; non è così semplice come capovolgere un interruttore della riga di comando. L'altra risposta è una domanda: perché hai davvero bisogno di questo? Non riesco a pensare immediatamente a una ragione valida.

+1

Sto sviluppando un sistema operativo e ho bisogno che il kernel e le applicazioni siano riuniti in un unico file immagine in modo che venga caricato rapidamente con una lettura e una scrittura (l'intera immagine), a.out sembra essere il formato ideale per questo, essere semplice e supportato da molti bootloader. – Nulik