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.¿Cómo compilar una biblioteca estática en Linux?
Respuesta
Ver Creating a shared and static library with the gnu compiler [gcc]
gcc -c -o out.o out.c
-c
medio para crear un archivo de objeto intermediario, en lugar de un archivo 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, vea el man page para más información.
Genere los archivos de objeto con gcc, luego use ar
para agruparlos en una biblioteca estática.
Aquí un ejemplo completo makefile:
makefile
TARGET = prog
$(TARGET): main.o lib.a
gcc $^ -o [email protected]
main.o: main.c
gcc -c $< -o [email protected]
lib.a: lib1.o lib2.o
ar rcs [email protected] $^
lib1.o: lib1.c lib1.h
gcc -c -o [email protected] $<
lib2.o: lib2.c lib2.h
gcc -c -o [email protected] $<
clean:
rm -f *.o *.a $(TARGET)
explicar el makefile:
target: prerequisites
- la cabeza regla[email protected]
- significa que el objetivo$^
- significa todos los requisitos previos$<
- significa simplemente el primer requisitoar
- una herramienta de Linux para crear, modificar y extraer de los archivos see the man pages for further information. Las opciones en este caso se refiere a:r
- reemplazar los archivos existentes dentro del archivoc
- crear un archivo si no está ya existentess
- crear un índice objeto-archivo en el archivo
Para concluir: La biblioteca estática en Linux no es más que un archivo de archivos de objeto.
main.cusando el lib
#include <stdio.h>
#include "lib.h"
int main (void)
{
fun1(10);
fun2(10);
return 0;
}
lib.hlos libs de cabecera principal
#ifndef LIB_H_INCLUDED
#define LIB_H_INCLUDED
#include "lib1.h"
#include "lib2.h"
#endif
lib1.cprimera fuente lib
#include "lib1.h"
#include <stdio.h>
void fun1 (int x)
{
printf("%i\n",x);
}
lib1.hla cabecera 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.csegunda fuente lib
#include "lib2.h"
#include <stdio.h>
void fun2 (int x)
{
printf("%i\n",2*x);
}
lib2.hel 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 */
- 1. ¿Cómo compilar Haskell a una biblioteca estática?
- 2. ¿Cómo compilar una biblioteca estática usando el NDK de Android?
- 3. Restricción de símbolos en una biblioteca estática de Linux
- 4. GCC/Linux: agregar una biblioteca estática a .so?
- 5. Biblioteca estática de compilación cruzada de Linux para Windows
- 6. Compilar una biblioteca compartida estáticamente
- 7. ¿Cómo vincular a una biblioteca estática en C?
- 8. ¿Convertir una biblioteca estática a una biblioteca compartida?
- 9. cómo vincular una biblioteca estática para iOS
- 10. Instalar y compilar la biblioteca Boost en Linux
- 11. Contenido de una biblioteca estática
- 12. ¿Cómo almacenar un número de versión en una biblioteca estática?
- 13. ObjC: Cómo compilar una biblioteca estática que incluye clases opcionales que dependen de una biblioteca de terceros
- 14. CMAKE: compilar biblioteca y vincularla
- 15. ¿Cómo construir una biblioteca estática Objective-C?
- 16. Cómo compilar una biblioteca con formularios WPF
- 17. En Linux, ¿cómo puedo saber si estoy enlazando a una biblioteca estática o dinámica?
- 18. ¿Cómo compilar la biblioteca dinámica para una aplicación JNI en Linux?
- 19. Cómo inicializar una biblioteca compartida en Linux
- 20. Usar una biblioteca estática en Qt Creator
- 21. cargar dinámicamente la biblioteca estática?
- 22. Crear una biblioteca estática para iPhone
- 23. Cambiar el origen de una biblioteca estática necesita limpieza y compilar en xcode 4
- 24. Pruebas de Boost.Test en una biblioteca estática
- 25. ¿Cómo compilar ZBar SDK con el proyecto en lugar de usar la biblioteca estática?
- 26. ¿Cómo compilar código objc en Linux?
- 27. ¿Cómo compilar C++ en Ubuntu Linux?
- 28. Cómo incluir biblioteca estática en el Makefile
- 29. Autoconf - incluyendo una biblioteca estática (novato)
- 30. Cómo vincular Boost en una biblioteca estática dependiente
Gracias por la explicación. –
las mejores respuestas son aquellas con ejemplos, gran trabajo :) – Youda008
hubiera ayudado a señalar lo que hacen los comandos y lo que pretenden lograr. especialmente en este caso el 'ar' necesita explicación, ya que es la clave para crear la biblioteca estática. – Joost