Capítulo 2. Código de construcción con GCC
Este capítulo describe situaciones en las que el código fuente debe transformarse en código ejecutable.
2.1. Relación entre las formas de código
Requisitos previos
- Comprender los conceptos de compilación y vinculación
Posibles formas de código
Los lenguajes C y C++ tienen tres formas de código:
Source code escritos en el lenguaje C o C }, se presentan como archivos de texto sin formato.
Los archivos suelen utilizar extensiones como
.c
,.cc
,.cpp
,.h
,.hpp
,.i
,.inc
. Para obtener una lista completa de las extensiones soportadas y su interpretación, consulte las páginas del manual de gcc:$ man gcc
Object code, creado por compiling el código fuente con un compiler. Se trata de una forma intermedia.
Los archivos de código objeto utilizan la extensión
.o
.Executable code, creado por el código objeto linking con un linker.
Los archivos ejecutables de aplicaciones de Linux no utilizan ninguna extensión de nombre de archivo. Los archivos ejecutables de objetos compartidos (bibliotecas) utilizan la extensión de nombre de archivo
.so
.
También existen archivos de biblioteca para la vinculación estática. Se trata de una variante del código objeto que utiliza la extensión de nombre de archivo .a
. No se recomienda la vinculación estática. Véase Sección 3.2, “Enlace estático y dinámico”.
Manejo de formas de código en GCC
La producción de código ejecutable a partir del código fuente se realiza en dos pasos, que requieren aplicaciones o herramientas diferentes. GCC puede utilizarse como controlador inteligente tanto para los compiladores como para los enlazadores. Esto le permite utilizar un único comando gcc
para cualquiera de las acciones requeridas (compilar y enlazar). GCC selecciona automáticamente las acciones y su secuencia:
- Los archivos fuente se compilan en archivos objeto.
- Se enlazan los archivos de objetos y las bibliotecas (incluyendo las fuentes previamente compiladas).
Es posible ejecutar GCC para que realice sólo el paso 1, sólo el paso 2, o ambos pasos 1 y 2. Esto viene determinado por los tipos de entradas y el tipo de salida(s) solicitado(s).
Dado que los proyectos más grandes requieren un sistema de compilación que normalmente ejecuta GCC por separado para cada acción, es mejor considerar siempre la compilación y el enlazado como dos acciones distintas, aunque GCC pueda realizar ambas a la vez.