3.4. Uso de una biblioteca estática con GCC
Las bibliotecas estáticas están disponibles como archivos que contienen ficheros objeto. Después de enlazarlas, pasan a formar parte del archivo ejecutable resultante.
Red Hat desaconseja el uso de enlaces estáticos por razones de seguridad. Consulte Sección 3.2, “Enlace estático y dinámico”. Utilice el enlazado estático sólo cuando sea necesario, especialmente contra las bibliotecas proporcionadas por Red Hat.
Requisitos previos
- GCC debe estar instalado en su sistema.
- Debe entender el enlace estático y dinámico.
- Usted tiene un conjunto de archivos fuente o de objetos que forman un programa válido, que requiere alguna biblioteca estática foo y ninguna otra biblioteca.
-
La biblioteca foo está disponible como un archivo
libfoo.a
, y no se proporciona ningún archivolibfoo.so
para la vinculación dinámica.
La mayoría de las bibliotecas que forman parte de Red Hat Enterprise Linux están soportadas sólo para el enlazado dinámico. Los pasos siguientes sólo funcionan para las bibliotecas que están not habilitadas para el enlace dinámico. Vea Sección 3.2, “Enlace estático y dinámico”.
Procedimiento
Para enlazar un programa a partir de los archivos fuente y objeto, añadiendo una biblioteca enlazada estáticamente foo, que se encuentra como un archivo libfoo.a
:
- Cambie al directorio que contiene su código.
Compilar los archivos fuente del programa con las cabeceras de la biblioteca foo:
$ gcc ... -Iheader_path -c ...
Sustituya header_path por una ruta a un directorio que contenga los archivos de cabecera de la biblioteca foo.
Enlaza el programa con la biblioteca foo:
$ gcc ... -Llibrary_path -lfoo...
Sustituya library_path por una ruta a un directorio que contenga el archivo
libfoo.a
.Para ejecutar el programa más tarde, simplemente:
$ ./programa
La opción de GCC -static
relacionada con el enlazado estático prohíbe todo el enlazado dinámico. En su lugar, utilice las opciones -Wl,-Bstatic
y -Wl,-Bdynamic
para controlar el comportamiento del enlazador con mayor precisión. Véase Sección 3.6, “Uso de bibliotecas estáticas y dinámicas con GCC”.