2011-11-28 13 views
7

¿Cómo puedo generar un formato de archivo a.out con gcc en arquitecturas x86?generando un formato de archivo a.out con gcc

Con nasm que puedo hacer esto fácilmente con la bandera -f, por ejemplo:

[[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]]$ 

en Linux, la compilación de archivos .c produce un objeto duende. ¿Cómo puedo producir archivos a.out con gcc?

+0

¿Qué sistema estás usando? No creo que Linux soporte más a los archivos ejecutables. No sé sobre archivos de objetos intermedios. –

+0

Creo que el núcleo se puede configurar con soporte para .out, pero está desactivado por defecto. Ha pasado un tiempo desde que compilé un núcleo, que puede que ya no sea el caso. – goldfire

+0

Linux lo admite si 'CONFIG_BINFMT_AOUT' está habilitado en tiempo de compilación. –

Respuesta

11

Para generar el formato a.out con gcc, se necesita que el vinculador lo haga. Puedes hacerlo pasando banderas de gcc gracias a la bandera -Wl.

Esto es lo que haría para el formato a.out:

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

También puede visualizar todos los formatos soportados escribiendo:

objdump -i 
+0

el problema es que tengo muchos archivos de objetos (.o) que están en formato elf, así que cuando los vinculo con el parámetro OUTPUT_FORMAT (a.out-i386-linux) en el script del enlazador obtengo este error: "no puedo representar la sección '.comment 'en formato de archivo de objeto a.out". Es por eso que necesito que el "gcc -c archivo.c" esté compilado desde el principio en un formato .out, y no en ELF. – Nulik

+0

Encontré la solución a lo anterior, con la opción -fno-ident sección .comment no se generó, inicié mi núcleo a.out con grub. gracias – Nulik

+0

Perdón, me perdí tu primer comentario y me alegro de que encontraste la solución tú mismo :) –

0

Hay dos respuestas a esta pregunta. Una es que tendrás que compilar un GCC nuevo con un punto de salida como objetivo; no es tan simple como activar un interruptor de línea de comando. La otra respuesta es una pregunta: ¿por qué realmente necesita esto? No puedo pensar inmediatamente en una razón válida.

+1

Estoy desarrollando un sistema operativo y necesito que kernel y aplicaciones se empaqueten juntos en un archivo de imagen para que se cargue rápidamente con una lectura y una escritura (toda la imagen), a.out parece ser el formato ideal para esto, siendo simple y soportado por muchos cargadores de arranque. – Nulik

Cuestiones relacionadas