c++ - library - Agregar una biblioteca externa al proyecto de Qt Creator
manejo de archivos en qt (7)
LIBS + = C: / Archivos de programa / OpenCV / lib
no funcionará porque está usando 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" . Recomiendo colocar bibliotecas en ubicaciones que no sean de espacio en blanco ;-)
¿Cómo puedo agregar una biblioteca externa a un proyecto creado por Qt Creator RC1 (versión 0.9.2)? Por ejemplo, la función win32 EnumProcesses()
requiere que Psapi.lib
se agregue en el proyecto para compilar.
¿Estás usando proyectos de qmake
? De ser así, puede agregar una biblioteca externa usando la variable LIBS
. P.ej:
win32:LIBS += path/to/Psapi.lib
El error al que te refieres se debe a la falta de una ruta de inclusión adicional. Intente agregarlo con: INCLUDEPATH + = C: / path / to / include / files / Espero que funcione. Saludos.
La forma correcta de hacer esto es así:
LIBS += -L/path/to -lpsapi
De esta forma funcionará en todas las plataformas compatibles con 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 quiera almacenar sus archivos lib en el directorio del proyecto, puede hacer referencia a ellos con la variable $$_PRO_FILE_PWD_
, por ejemplo:
LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi
Me gustaría agregar, para mayor completitud, que también puede agregar solo la RUTA DE LA BIBLIOTECA, donde buscará una biblioteca dependiente (que puede no estar referenciada directamente en su código pero puede necesitar una biblioteca que use).
A modo de comparación, esto correspondería a lo que hace el entorno LIBPATH, pero es algo así como oscuro en Qt Creator y no está bien documentado.
La forma en que surgió esto es la siguiente:
LIBS += -L"$$_PRO_FILE_PWD_/Path_to_Psapi_lib/"
Básicamente, si no proporciona el nombre real de la biblioteca, agrega la ruta hacia donde buscará las 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á.
Si desea implementar su aplicación en máquinas de clientes, en lugar de utilizar 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 la expresión LIBS+= -Lxxx -lyyy
demasiado de una caja negra:
No sabemos exactamente qué es el archivo de la biblioteca (estática o dinámica) que ha encontrado el vinculador. 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.
No podemos permitirnos que el vinculador use enlaces simbólicos a bibliotecas, ya que esto rompería el paquete de implementación.
Queremos ver en el nombre de la biblioteca si vinculamos una biblioteca estática o dinámica.
Entonces, para nuestro caso particular, usamos solo 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 64bit, 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 el paquete de implementación ya que conocemos sus rutas de archivos.
Y para agregar múltiples archivos de biblioteca 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 / VolumeRendering E: / DebugLibrary / VTK / Widgets E: / DebugLibrary / VTK / Wrapping
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