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.
Consulte Creación de una biblioteca compartida y estática con el compilador 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.
Genere los archivos objeto con gcc, luego use ar
para agruparlos en una biblioteca estática.