c++ linker static-libraries qt-creator

c++ - Usar una biblioteca estática en Qt Creator



linker static-libraries (5)

..de creador del proyecto QT

  1. pase a projectName.pro desde el menú del lado izquierdo
  2. tipo LIBS + =
  3. rightClick AddLibrary

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

Creé y compilé mi biblioteca estática usando Qt Creator (New => Projects / C ++ Library => Set type para "Statically Linked Library"). 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.


En su proyecto que usa la biblioteca, haga que la variable LIBS apunte a 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.

p.ej:

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

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

De los documentos de qmake:

Esta variable contiene una lista de bibliotecas para vincular al proyecto. Puede usar los indicadores 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 enlazador). La única limitación a esto es que la biblioteca debe existir, para que qmake encuentre en qué directorio vive a -l lib.

Nota: En Windows, la especificación de bibliotecas con la opción -l, como en el ejemplo anterior, hará que se use la biblioteca con el número de versión más alto; por ejemplo, podría usarse libmath2.lib en lugar de libmathlib. Para evitar esta ambigüedad, le recomendamos que especifique explícitamente la biblioteca que se utilizará incluyendo el sufijo del nombre de archivo .lib.


La variante

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

no funciona si tiene ambas libLIBNAME.a estáticas libLIBNAME.a y libLIBNAME.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 forzar el enlace con uno estático , debe especificarlo explícitamente sin ninguna opción.

LIBS += PATH_TO_LIB_DIR/libLIBNAME.a


Lo es

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

o

LIBS += -L/somepath -lsomename.a

o

LIBS += -L/somepath -lsomename"

Esto debería ser tan fácil como sea 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 sin ayuda. ..


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

¡Nota! ese nombre de archivo de lib: lib [nameOfLib] .a y solo debe pasar la parte original -l [nameOfLib]