2009-04-05 27 views

Respuesta

196

La forma correcta de hacerlo es la siguiente:

LIBS += -L/path/to -lpsapi 

Esta manera de que funcione en todas las plataformas soportadas por Qt. La idea es que debe separar el directorio del nombre de la biblioteca (sin la extensión y sin ningún prefijo 'lib'). Por supuesto, si incluye una lib específica de Windows, esto realmente no importa.

En caso de que desee almacenar sus archivos lib en el directorio del proyecto, se puede hacer referencia a ellos con la variable $$_PRO_FILE_PWD_, por ejemplo:

LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi 
+6

Esta es la respuesta correcta para esta publicación. – sivabudh

+3

+1 porque considera la solución multiplataforma, la respuesta más completa. – morde

+2

¿Es posible especificar una variable de entorno como ruta de biblioteca? Lo estoy preguntando porque escribir nombres de ruta codificados en el archivo .pro rompería las cosas si un proyecto es desarrollado por varias personas que pueden no tener todas las bibliotecas instaladas en las mismas ubicaciones. – antred

20

¿Estás utilizando proyectos qmake? De ser así, puede agregar una biblioteca externa usando la variable LIBS. Por ejemplo:

win32:LIBS += path/to/Psapi.lib 
+1

Lo siento por una pregunta poco convincente, pero ¿la biblioteca psapi ya debe estar precompilada o QtCreator se encargará de construirla? – Dfr

5

El error al que se refiere es debido a la falta de una ruta adicional de inclusión. Intenta agregarlo con: INCLUDEPATH + = C: \ path \ to \ include \ files \ Espero que funcione. Saludos.

10

LIBS + = C: \ Archivos de programa \ OpenCV \ lib

no funcionará porque está utilizando espacios en blanco en Archivos de programa. En este caso, debe agregar comillas, por lo que el resultado se verá así: LIBS + = "C: \ Archivos de programa \ OpenCV \ lib". me recomiendan la colocación de las bibliotecas en ubicaciones no de espacio en blanco ;-)

+0

Las versiones más nuevas de Qt (Creador) siempre quieren barras diagonales (únicas) como separador de directorios.La única excepción es cuando utiliza el comando "sistema" en Windows. Luego necesita alimentar al sistema con una barra invertida escapada, es decir, dos barras invertidas. Para reemplazar todas las barras diagonales con dos barras invertidas se puede hacer de la siguiente manera: 'WINDIR = $$ DIR',' WINDIR ~ = s, /, \\, g' – adlag

3

Y para añadir múltiples archivos de la biblioteca se puede escribir de la siguiente manera:

INCLUDEPATH * = E:/DebugLibrary/VTK E:/DebugLibrary/VTK/Common E:/DebugLibrary/VTK/Filtering E:/DebugLibrary/VTK/GenericFiltering E:/DebugLibrary/VTK/Graphics E:/DebugLibrary/VTK/GUISupport/Qt E:/DebugLibrary/VTK/Hybrid E:/DebugLibrary/VTK/Imaging E:/DebugLibrary/VTK/IO E:/DebugLibrary/VTK/Parallel E:/DebugLibrary/VTK/Rendering E:/DebugLibrary/VTK/Utilities E:/DebugLibrary/VTK/volume rendering E:/DebugLibrary/VTK/Reproductores E:/DebugLibrary/VTK/Envolver

LIBS * = -LE:/DebugLibrary/VTKBin/bin/release -lvtkCommon -lvtksys - lQVTK -lvtkWidgets -lvtkRendering -lvtkGraphics -lvtkImaging -lvtkIO -lvtkFiltering -lvtkDICOMParser -lvtkpng -lvtktiff -lvtkzlib -lvtkjpeg -lvtkexpat -lvtkNetCDF -lvtkexoIIc -lvtkftgl -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGenericFiltering

1

Si desea Para implementar su aplicación en máquinas de clientes, en lugar de usar solo su aplicación, descubrimos que el método LIBS+= -Lxxx -lyyy puede generar confusión si no hay problemas.

Desarrollamos aplicaciones para Linux, Mac y Windows utilizando Qt. Enviamos aplicaciones completas e independientes.Por lo tanto, todas las bibliotecas que no sean del sistema se deben incluir en el paquete de implementación. Queremos que nuestros clientes puedan ejecutar la aplicación desde la misma memoria USB para todos los sistemas operativos. Por razones de compatibilidad de plataforma, el dispositivo USB debe formatearse como FAT32, que no admite enlaces simbólicos (Linux).

Encontramos el LIBS+= -Lxxx -lyyy lenguaje demasiado de un cuadro negro:

  1. No sabemos exactamente cuál es la ruta de archivo es de la biblioteca (estática o dinámica) que se ha encontrado por el enlazador. Esto es inconveniente Nuestro enlazador de Mac encontró regularmente libs diferentes de los que pensamos que deberían usarse. Esto sucedió varias veces con las bibliotecas OpenSSL donde el enlazador Mac encontró y usó su propia versión anterior, incompatible, OpenSSL en lugar de nuestra versión solicitada.

  2. No podemos permitirnos que el enlazador utilice enlaces simbólicos a bibliotecas, ya que esto rompería el paquete de implementación.

  3. Queremos ver en el el nombre de la biblioteca si vinculamos una biblioteca estática o dinámica.

Por lo tanto, en nuestro caso particular solo usamos rutas de acceso absolutas y verificamos si existen. Eliminamos todos los enlaces simbólicos.

Primero descubrimos qué sistema operativo estamos utilizando y lo ponemos en la variable CONFIG. Y, por ejemplo, para Linux de 64 bits, entonces:

linux64 { 
    LIBSSL= $$OPENSSLPATH/linux64/lib/libssl.a 
    !exists($$LIBSSL): error ("Not existing $$LIBSSL") 
    LIBS+= $$LIBSSL 
    LIBCRYPTO= $$OPENSSLPATH/linux64/lib/libcrypto.a 
    !exists($$LIBCRYPTO): error ("Not existing $$LIBCRYPTO") 
    LIBS+= $$LIBCRYPTO 
} 

Todas las dependencias se pueden copiar en paquete de implementación como la conocemos sus rutas de los archivos.

0

Me gustaría agregar, para completar, que también puede agregar solo la RUTA DE BIBLIOTECA donde buscará una biblioteca dependiente (que puede no estar referenciada directamente en su código pero puede necesitar una biblioteca que use) .

Para comparar, esto correspondería a lo que hace el entorno de LIBPATH pero es algo así como oscuro en Qt Creator y no está bien documentado.

donde vine en torno a esta siendo seguido:

LIBS += -L"$$_PRO_FILE_PWD_/Path_to_Psapi_lib/" 

Esencialmente, si no se proporciona el nombre de la biblioteca real, se añade la ruta en la que se buscará bibliotecas dependientes. La diferencia en la sintaxis es pequeña, pero esto es muy útil para proporcionar solo la RUTA donde buscar bibliotecas dependientes. En algún momento, es un fastidio suministrar a cada ruta una biblioteca individual en la que usted sabe que todas están en cierta carpeta y Qt Creator las recogerá.

Cuestiones relacionadas