¿Alguien puede decirme cómo crear una biblioteca estática a partir de un archivo .cpp y .hpp? ¿Necesito crear el .o y el .a? También me gustaría saber cómo puedo compilar una biblioteca estática y usarla en otro código .cpp. Tengo header.cpp, header.hpp .me gustaría crear header.a. Pruebe el encabezado. A entest.cpp . A . Estoy usando g ++ para compilar.
c++
gcc
compiler-construction
g++
linuxx
fuente
fuente

Respuestas:
Cree un archivo .o:
agregue este archivo a una biblioteca, creando una biblioteca si es necesario:
usar biblioteca:
fuente
a.outformato, por lo que es muy engañoso. ¿Y por qué debería "nunca" crear un ejecutable llamadotest?testes un comando del sistema. Pero dado que los programas de prueba generalmente nunca se instalan en el directorio bin del sistema y requieren que usted escriba,./testtampoco es un gran problema para mí ...a.outformato, pero el nombre permanece por motivos heredados. (Y si no puede usar un shell correctamente, entonces ese es su problema; yo sé cómo ejecutar un ejecutable desde el directorio actual.testEstá bien para un nombre de ejecutable, siempre y cuando esté escribiendo solo una prueba rápida fragmento, por supuesto.)testes algo de lo que he aprendido a arrepentirme y soy "perfectamente capaz de usar un shell". Es una mala idea, y lo he visto morder a muchos otros que son "perfectamente capaces de usar un caparazón".Puede crear un
.aarchivo usando laarutilidad, así:libes un directorio que contiene todas sus bibliotecas. Es una buena práctica organizar su código de esta manera y separar el código y los archivos de objeto. Tener todo en un directorio generalmente se ve feo. La línea anterior crealibHeader.aen el directoriolib. Entonces, en su directorio actual, haga:Luego ejecute el
arcomando anterior .Al vincular todas las bibliotecas, puede hacerlo así:
La
-Lbandera podrág++agregar ellib/directorio a la ruta. De esta manera,g++sabe en qué directorio buscarlibHeader.-llibHeadermarca la biblioteca específica para vincular.donde test.o se crea así:
fuente
-lHeaderlugar de-llibHeader?Si.
Cree el .o (como de costumbre):
Crea el archivo :
Prueba :
Tenga en cuenta que parece un poco inútil hacer un archivo con un solo módulo. Con la misma facilidad podrías haber escrito:
Aún así, le daré el beneficio de la duda de que su caso de uso real es un poco más complejo, con más módulos.
¡Espero que esto ayude!
fuente
ranlibque en GNU simplemente significaar s.