Respuestas:
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 está incluyendo una biblioteca específica de Windows, esto realmente no importa.
En caso de que desee almacenar sus archivos lib en el directorio del proyecto, puede hacer referencia a ellos con la $$_PRO_FILE_PWD_
variable, por ejemplo:
LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi
qmake -tp vc
, no encuentro nombres de libs en Additional Dependencies
el proyecto, pero el proyecto vs funciona bien. ¿Eso significa que hay otros métodos para agregar Additional Dependencies
vs?
LIBS += -lGdi32
.
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" . Recomiendo colocar bibliotecas en ubicaciones sin espacios en blanco ;-)
WINDIR = $$DIR
,WINDIR ~=s,/,\\,g
El error al que se refiere se debe a que falta una ruta de inclusión adicional. Intente agregarlo con: INCLUDEPATH + = C: \ ruta \ a \ incluir \ archivos \ Espero que funcione. Saludos.
Y para agregar varios archivos de biblioteca, puede escribir lo siguiente:
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 / liberar -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 implementar su aplicación en las máquinas de los clientes, en lugar de usar su aplicación solo usted mismo, descubrimos que el LIBS+= -Lxxx -lyyy
método puede generar confusión, si no problemas.
Desarrollamos aplicaciones para Linux, Mac y Windows usando Qt. Enviamos aplicaciones completas e independientes. Por lo tanto, todas las bibliotecas que no son del sistema deben incluirse 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 con la plataforma, la memoria USB debe formatearse como FAT32, que no admite enlaces simbólicos (Linux).
Encontramos el LIBS+= -Lxxx -lyyy
idioma demasiado de una caja negra:
No sabemos exactamente cuál es la ruta de archivo de la biblioteca (estática o dinámica) que ha encontrado el enlazador. Esto es un inconveniente. Nuestro enlazador de Mac encontró regularmente bibliotecas diferentes de las que pensamos que deberían usarse. Esto sucedió varias veces con las bibliotecas de OpenSSL donde el enlazador de Mac encontró y usó su propia versión de OpenSSL, más antigua e incompatible, en lugar de la versión solicitada.
No podemos permitirnos que el enlazador utilice enlaces simbólicos a bibliotecas, ya que esto rompería el paquete de implementación.
Queremos ver a partir del nombre de la biblioteca si vinculamos una biblioteca estática o dinámica.
Entonces, para nuestro caso particular, usamos solo rutas de archivo absolutas y verificamos si existen. Eliminamos todos los enlaces simbólicos.
Primero averiguamos qué sistema operativo estamos usando y lo colocamos 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 el paquete de implementación, ya que conocemos sus rutas de archivo.
Me gustaría agregar, en aras de la integridad, 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 una biblioteca que usa puede necesitarla).
A modo de comparación, esto correspondería a lo que hace el entorno LIBPATH, pero es algo oscuro en Qt Creator y no está bien documentado.
La forma en que resolví 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 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 solo una molestia proporcionar cada biblioteca individual de ruta donde sabe que están todas en una carpeta determinada y Qt Creator las recogerá.
en .pro: LIBS += Ole32.lib OleAut32.lib Psapi.lib advapi32.lib
en .h / .cpp: #pragma comment(lib,"user32.lib")
#pragma comment(lib,"psapi.lib")