¿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.out
formato, por lo que es muy engañoso. ¿Y por qué debería "nunca" crear un ejecutable llamadotest
?test
es 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,./test
tampoco es un gran problema para mí ...a.out
formato, 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.test
Está bien para un nombre de ejecutable, siempre y cuando esté escribiendo solo una prueba rápida fragmento, por supuesto.)test
es 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
.a
archivo usando laar
utilidad, así:lib
es 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.a
en el directoriolib
. Entonces, en su directorio actual, haga:Luego ejecute el
ar
comando anterior .Al vincular todas las bibliotecas, puede hacerlo así:
La
-L
bandera podrág++
agregar ellib/
directorio a la ruta. De esta manera,g++
sabe en qué directorio buscarlibHeader
.-llibHeader
marca la biblioteca específica para vincular.donde test.o se crea así:
fuente
-lHeader
lugar 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
ranlib
que en GNU simplemente significaar s
.