Pregunta

¿Cómo puedo añadir biblioteca externa en un proyecto construido por Qt Creator RC1 (versión 0.9.2)? Por ejemplo, la función de Win32 requiere EnumProcesses() Psapi.lib que se añadirán en el proyecto de construcción.

¿Fue útil?

Solución

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 usted tiene que separar el directorio del nombre de la biblioteca (sin la extensión y sin ningún prefijo 'lib'). Por supuesto, si está incluyendo una librería 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

Otros consejos

¿Está utilizando proyectos qmake? Si es así, puede agregar una biblioteca externa utilizando la LIBS variable. Por ejemplo:

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

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

no funcionará porque está utilizando los espacios en blanco en los archivos de programa. En este caso hay que añadir las citas, por lo que el resultado se verá como esto: LIBS + = "C: \ Archivos de programa \ OpenCV \ lib" . Recomiendo bibliotecas colocan en lugares no de espacio en blanco; -)

El error que quiere decir es debido a la falta de inclusión adicionales camino. Trate de añadir con: INCLUDEPATH + = C: \ ruta \ a \ archivos de inclusión \ \ Espero que funcione. Saludos.

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

  

INCLUDEPATH * = E: / DebugLibrary / VTK E: / DebugLibrary / VTK / Común   E: / DebugLibrary / VTK / filtrado de correo: / DebugLibrary / VTK / GenericFiltering   E: / DebugLibrary / VTK / Gráficos E: / DebugLibrary / VTK / GUISupport / Qt   E: / DebugLibrary / VTK / híbrido E: / DebugLibrary / VTK / Imaging   E: / DebugLibrary / VTK / IO E: / DebugLibrary / VTK / Paralelo   E: / DebugLibrary / VTK / Rendering E: / DebugLibrary / VTK / Utilidades   E: / DebugLibrary / VTK / volume rendering E: / DebugLibrary / VTK / Reproductores   E: / DebugLibrary / VTK / Embalaje

     

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

Si desea desplegar su aplicación en las máquinas de los clientes, en lugar de utilizar su aplicación sólo a sí mismo, nos encontramos con que el método LIBS+= -Lxxx -lyyy puede dar lugar a confusión si no los problemas.

Desarrollamos aplicaciones para Linux, Mac y Windows utilizando Qt. Enviamos, aplicaciones independientes completos. Así que todas las bibliotecas no son del sistema deben ser incluidos en el paquete de implementación. Queremos que nuestros clientes sean capaces de ejecutar la aplicación desde la misma memoria USB para todos los sistemas operativos. Por razones de compatibilidad de la plataforma de la memoria USB a continuación, debe tener el formato FAT32, que no soporta enlaces simbólicos (Linux).

Hemos encontrado el idioma LIBS+= -Lxxx -lyyy 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 un inconveniente. Nuestra enlazador Mac encuentra regularmente librerías diferentes de los que pensamos que se debe utilizar. Esto sucedió varias veces con bibliotecas de OpenSSL, donde el enlazador Mac encontrado y utilizado su propio - antigua e incompatible -. Versión de OpenSSL en lugar de nuestra versión solicitada

  2. No nos podemos permitir que el enlazador utiliza enlaces simbólicos a las bibliotecas ya que esto rompería el paquete de implementación.

  3. Queremos ver desde el nombre de la biblioteca si ligamos un estático o una biblioteca dinámica.

Así que para nuestro caso particular sólo utilizamos rutas de los archivos absolutos y comprobar si es que existen. Eliminamos todos los enlaces simbólicos.

En primer lugar nos encontramos con que sistema operativo que esté utilizando y poner esto en el variable de configuración. Y, por ejemplo, para Linux de 64 bits, a continuación:

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.

Me gustaría añadir a la mayor abundamiento, que también se puede añadir la ruta de la biblioteca donde se buscará una biblioteca dependiente (que puede que no aparezcan directamente en el código, pero una biblioteca que lo utilice puede necesitar).

Para la comparación, esto correspondería a qué entorno LIBPATH no, pero este tipo de oscuro en Qt Creator y no está bien documentada.

La forma en que llegué alrededor de este es el siguiente:

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

En esencia, 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ño, pero esto es muy útil para suministrar sólo la ruta donde buscar bibliotecas dependientes. Que en algún momento es sólo un dolor de suministrar cada ruta de biblioteca individual donde se sabe que todos ellos están en carpeta determinada y Qt Creator recogerlos.

en .pro: LIBS += Ole32.lib OleAut32.lib Psapi.lib advapi32.lib

en .h / .cpp: #pragma comment(lib,"user32.lib")

#pragma comment(lib,"psapi.lib")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top