Cómo comstackr una biblioteca estática en Linux?

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

Consulte Creación de una biblioteca compartida y estática con el comstackdor gnu [gcc]

 gcc -c -o out.o out.c 

-c significa crear un archivo de objeto intermediario, en lugar de un ejecutable.

 ar rcs libout.a out.o 

Esto crea la biblioteca estática. r significa insertar con reemplazo, c significa crear un nuevo archivo y s significa escribir un índice. Como siempre, mira la página man para más información.

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 objective
  • $^ - 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  #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  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  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 */ 

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