librerias ejecutar compilar compilador como gcc static-libraries

gcc - ejecutar - Cómo compilar una biblioteca estática en Linux?



gcc compilador (3)

Aquí un ejemplo completo de archivo MAKE:

makefile

TARGET = prog $(TARGET): main.o lib.a gcc $^ -o $@ main.o: main.c gcc -c $< -o $@ lib.a: lib1.o lib2.o ar rcs $@ $^ lib1.o: lib1.c lib1.h gcc -c -o $@ $< lib2.o: lib2.c lib2.h gcc -c -o $@ $< clean: rm -f *.o *.a $(TARGET)

explicando el archivo MAKE

  • target: prerequisites : el jefe de regla
  • $@ - significa el objetivo
  • $^ - significa todos los requisitos previos
  • $< - significa solo el primer requisito
  • ar : una herramienta de Linux para crear, modificar y extraer de archivos, consulte las páginas man para obtener más información . Las opciones en este caso significan:
    • r - reemplazar archivos existentes dentro del archivo
    • c - crea un archivo si no ya existe
    • s - crea un índice de archivo de objeto en el archivo

Para concluir : la biblioteca estática en Linux no es más que un archivo de archivos de objetos.

main.c usando la lib

#include <stdio.h> #include "lib.h" int main ( void ) { fun1(10); fun2(10); return 0; }

lib.h el encabezado principal de libs

#ifndef LIB_H_INCLUDED #define LIB_H_INCLUDED #include "lib1.h" #include "lib2.h" #endif

lib1.c primera fuente de lib

#include "lib1.h" #include <stdio.h> void fun1 ( int x ) { printf("%i/n",x); }

lib1.h el encabezado correspondiente

#ifndef LIB1_H_INCLUDED #define LIB1_H_INCLUDED #ifdef __cplusplus extern “C” { #endif void fun1 ( int x ); #ifdef __cplusplus } #endif #endif /* LIB1_H_INCLUDED */

lib2.c segunda fuente de lib

#include "lib2.h" #include <stdio.h> void fun2 ( int x ) { printf("%i/n",2*x); }

lib2.h el encabezado correspondiente

#ifndef LIB2_H_INCLUDED #define LIB2_H_INCLUDED #ifdef __cplusplus extern “C” { #endif void fun2 ( int x ); #ifdef __cplusplus } #endif #endif /* LIB2_H_INCLUDED */

Tengo una pregunta: cómo compilar una biblioteca estática en Linux con gcc, es decir, necesito compilar mi código fuente en un archivo llamado out.a. ¿Es suficiente simplemente compilar con el comando gcc -o out.a out.c ? No estoy muy familiarizado con gcc, espero que alguien pueda darme una mano.



Genere los archivos objeto con gcc, luego use ar para agruparlos en una biblioteca estática.