2009-09-01 45 views
32

Me está costando encontrar documentación que explique claramente cómo usar una biblioteca estática en Qt Creator.Usar una biblioteca estática en Qt Creator

He creado y compilado mi biblioteca estática usando Qt Creator (Nuevo => Proyectos \ Biblioteca de C++ => Establecer tipo a "Biblioteca enlazada estáticamente"). Compila y escupe un "archivo .a".

El problema que encuentro es cuando trato de usar la biblioteca. Tengo otro proyecto que me gustaría usarlo (#include archivos en la biblioteca, etc.) pero no sé la forma correcta de vincularme con la biblioteca o incluir archivos de la biblioteca.

Respuesta

34
LIBS += -L[path to lib] -l[name of lib] 

Nota! ese nombre de archivo de lib: lib [nameOfLib] .a y usted tiene que pasar sólo una parte original de -l [nameOfLib]

+1

Encontré la respuesta en http://doc.trolltech.com/4.5/qmake-project-files.html#declaring-other-libraries poco después de publicarla (había estado buscando material estúpido sobre el creador en lugar de solo vagar por los documentos de qmake)) Todavía no sé lo que significan -L o -l, pero tal es la naturaleza de los makefiles .. línea de comandos gobbl-dee-gook que puede ser fácilmente analizada en ... línea de comandos engullir-dee-gook. La respuesta de RPG también es relevante, el material de includepath es importante ... ¡Marqué el tuyo correctamente porque el -L/-l también parece importante! –

+5

Esto no funcionó para mí, pero sí lo hizo otra respuesta, que es hacer clic derecho al editar el archivo .pro y usar la interfaz de usuario "Agregar biblioteca". – andrewrk

15

En su proyecto que usa la biblioteca, haga que la variable LIBS señale la ruta de acceso de la biblioteca.
Para incluir archivos de la biblioteca, agregue la carpeta de la biblioteca al INCLUDEPATH y luego haga un #include regular en sus archivos de código.

por ejemplo:

# the binary's .pro 
LIBS += c:/mylibs/math.lib 
INCLUDEPATH += c:/mylibs 

Editado:
-L le dice a qmake que el camino es un directorio que puede buscar bibliotecas -l le dice que el camino es un archivo, pero tomar nota de la observación a continuación.

De los documentos QMake:

Esta variable contiene una lista de las bibliotecas a que incorporar en el proyecto . Puede usar las marcas Unix -l (biblioteca) y -L (ruta de la biblioteca) y qmake hará lo correcto con estas bibliotecas en Windows (esto significa pasar la ruta completa de la biblioteca al vinculador) . La única limitación es que esta debe existir la biblioteca , por qmake para encontrar qué directorio un -l vidas lib en

. Nota: En Windows, las bibliotecas que especifican con la opción -l, como en el anterior ejemplo, causará que la biblioteca con sea el número de versión más alto que se utilizará; por ejemplo, libmath2.lib podría ser potencialmente utilizado en lugar de libmathlib. Para evitar esta ambigüedad, recomendamos que explícitamente especifique la biblioteca que va a ser utilizada por incluyendo el sufijo de nombre de archivo .lib.

+0

Gracias por publicar esta respuesta. Aquí están los enlaces a las variables LIBS e INCLUDEPATH de los documentos de Qt5: [LIBS] (http://doc.qt.io/qt-5/qmake-variable-reference.html#libs), y [INCLUDEPATH] (http://doc.qt.io/qt-5/qmake-variable-reference.html#includepath). – RAM

11

..de proyecto creador QT

  1. Goto projectName.pro del menú de la izquierda
  2. tipo LIBS + =
  3. rightClick AddLibrary
+7

escribiendo 'LIBS + =' no es necesario. Puedes acortar esto a 2 pasos. – andrewrk

+0

En realidad, esta es la única solución que podría hacer funcionar todas las respuestas. Como lo sugirió andrewrk, no necesita escribir LIBS + =. Todo lo que necesita es ir al archivo .pro, hacer clic con el botón secundario, Agregar biblioteca y dejar que QtCreator genere las líneas de código requeridas (que BTW, en mi sistema [Qt 5.4, Linux], se veía bastante diferente de lo sugerido en otras respuestas.) – Karpov

3

Es

LIBS += -L"/some path" -l"somename.a" 

o

LIBS += -L/somepath -lsomename.a 

o

LIBS += -L/somepath -lsomename" 

Esto debería ser lo más fácil posible, pero por alguna razón es MUY difícil sacar un resultado de búsqueda porque hay tantos éxitos de foros de personas que piden ayuda y he seguido todos los consejos que puedo obtener, pero no ayuda ...

+1

encontrará su respuesta en Dewfy, respuesta – Coren

+0

Las primeras dos variantes no funcionan para mí en Linux. – Temak

8

la variante

LIBS += -L[PATH_TO_LIB_DIR] -l[LIBNAME] 

no funciona si tiene tanto estáticas y dinámicas libLIBNAME.alibLIBNAME.so libs en la misma carpeta PATH_TO_LIB_DIR.
En este caso en mi linux con QMake v 3.0 el dinámico está vinculado por defecto.
Para vinculación de fuerza con estática, debe especificarla explícitamente sin ninguna opción.

LIBS += PATH_TO_LIB_DIR/libLIBNAME.a 
+0

Observé algo similar: si hay un 'module.dll' y un' libmodule.a' en la misma carpeta e incluyo el dll con '-L -l ', aparece un error de definiciones múltiples. Sin embargo, si elimino el archivo de lib estática (.a), entonces funciona. No estoy seguro de si esto fue una coincidencia o un comportamiento esperado ... – user2366975