Todo lo que quieres saber sobre GCC

Nota de la salida anterior del archivo preprocesado que desde nuestro programa ha solicitado el stdio.el encabezado h se incluirá en nuestra fuente que, a su vez, solicitó un montón de otros archivos de encabezado.

Compilación

El siguiente paso es tomar el archivo preprocesado como entrada, compilarlo y producir una salida compilada intermedia. El archivo de salida para esta etapa produce código de ensamblaje que depende de la máquina.

Mediante el uso de la bandera «-S » con gcc, podemos convertir el código fuente C preprocesado en lenguaje ensamblador sin crear un archivo objeto:

$ gcc -S HelloWorld.i -o HelloWorld.s

Archivo compilado

Aunque no me gusta mucho la programación a nivel de ensamblador, un vistazo rápido concluye que esta salida a nivel de ensamblador está en alguna forma de instrucciones que el ensamblador puede entender y convertirla en lenguaje a nivel de máquina.

Ensamblado

Como todos sabemos, las máquinas solo pueden entender lenguaje binario, por lo que ahora requerimos un ENSAMBLADOR que convierta el código ensamblado en «HelloWorld».archivo c » en código binario.

ASSEMBLER fue una de las primeras herramientas de software desarrolladas después de la invención de la computadora digital.

Si hay llamadas a funciones externas en el código del ensamblador, el Ensamblador deja las direcciones de las funciones externas sin definir, para ser rellenadas más tarde por el Enlazador.

El Ensamblador se puede invocar como se muestra a continuación. Mediante el uso de la bandera «-c» en gcc, podemos convertir el código de ensamblaje en código a nivel de máquina:

$ gcc -c HelloWorld.c -o HelloWorld.o

HelloWorld.o

Lo único que podemos explicar mirando el HelloWorld.o el archivo es sobre el ELFO de cadena en la primera línea. ELF significa formato ejecutable y enlazable.

Un archivo objeto y un archivo ejecutable vienen en varios formatos, como ELF (Formato Ejecutable y de enlace) y COFF (Formato de Archivo Objeto Común). Por ejemplo, ELF se usa en sistemas Linux, mientras que COFF se usa en sistemas Windows.

Este es un formato relativamente nuevo para archivos objeto a nivel de máquina y ejecutables producidos por gcc. Antes de esto, se usaba un formato conocido como a.out. Se dice que ELF es un formato más sofisticado que un.out (Podríamos profundizar en el formato ELF en algún otro artículo futuro).

Si compila su código sin especificar el nombre del archivo de salida, el archivo de salida producido tiene el nombre ‘a.out’, pero el formato ahora ha cambiado a ELF. Es solo que el nombre de archivo ejecutable predeterminado sigue siendo el mismo.

Enlazar

Esta es la fase final en la que se realizan todos los enlaces de llamadas a funciones con sus definiciones. El enlazador sabe dónde se implementan todas estas funciones (el Ensamblador ha dejado la dirección de todas las funciones externas a llamar). Hasta esta etapa, GCC no conoce la función como printf ().El Ensamblador habría dejado la dirección de las funciones a llamar y el Enlazador hace el proceso final de rellenar estas direcciones con las definiciones reales. El enlazador también hace algunas tareas adicionales para nosotros. Combina nuestro programa con algunas rutinas estándar que se necesitan para que nuestro programa se ejecute. ¡Así que el tamaño final del ejecutable es mucho más que el archivo de entrada!

Todo el proceso de enlace es manejado por gcc e invocado de la siguiente manera:

$ gcc -o Output HelloWorld.c

El comando anterior ejecuta el archivo » HelloWorld.c «y produce el archivo ejecutable final «Output».

listar todos los archivos usando ls-l

Como puede ver, el archivo’ Output ‘ es por defecto un archivo ejecutable con permisos-rwxrwxr-x, esto solo significa que tiene permisos ejecutables para todos los usuarios(propietario,grupo y otros). Si ejecuta este archivo ejecutable simplemente escribiendo ‘./ Output ‘ ¡obtienes la salida final de nuestro Programa !

Salida del archivo ejecutable de

Así que ahora sabemos cómo un programa en C se convierte a un archivo ejecutable . Profundizaremos un poco más en la programación en C en los próximos artículos. Hasta entonces, ¡Feliz Aprendizaje! 🙂

You might also like

Deja una respuesta

Tu dirección de correo electrónico no será publicada.