Don*_*alo 106 c++ winapi qt qt-creator
如何将外部库添加到由Qt Creator RC1(版本0.9.2)构建的项目中?例如,EnumProcesses()
需要Psapi.lib
在要构建的项目中添加win32函数.
小智 211
正确的方法是这样的:
LIBS += -L/path/to -lpsapi
Run Code Online (Sandbox Code Playgroud)
这样它就可以在Qt支持的所有平台上运行.这个想法是你必须将目录与库名分开(没有扩展名,没有任何'lib'前缀).当然,如果你包含一个Windows特定的lib,这真的没关系.
如果要将lib文件存储在项目目录中,可以使用$$_PRO_FILE_PWD_
变量引用它们,例如:
LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi
Run Code Online (Sandbox Code Playgroud)
dir*_*tly 22
你在使用qmake
项目吗?如果是这样,您可以使用该LIBS
变量添加外部库.例如:
win32:LIBS += path/to/Psapi.lib
Run Code Online (Sandbox Code Playgroud)
小智 11
LIBS + = C:\ Program Files\OpenCV\lib
因为你在程序文件中使用空格而无法工作.在这种情况下,您必须添加引号,因此结果将如下所示:LIBS + ="C:\ Program Files\OpenCV\lib".我建议将库放在非空白区域;-)
要添加多个库文件,您可以编写如下:
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 -lvtkex ollc-lvtkftgl -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGenericFiltering
如果您想将应用程序部署在客户的计算机上,而不是仅自己使用您的应用程序,我们发现该LIBS+= -Lxxx -lyyy
方法即使不会导致问题,也会导致混乱。
我们使用 Qt 开发适用于 Linux、Mac 和 Windows 的应用程序。我们提供完整的独立应用程序。所以所有非系统库都应该包含在部署包中。我们希望我们的客户能够从同一个 USB 记忆棒运行适用于所有操作系统的应用程序。出于平台兼容性的原因,USB 记忆棒必须格式化为 FAT32,它不支持 (Linux) 符号链接。
我们发现这个LIBS+= -Lxxx -lyyy
习语太黑匣子了:
我们并不确切知道链接器找到的(静态或动态)库的文件路径是什么。这很不方便。我们的 Mac 链接器经常发现与我们认为应该使用的库不同的库。这种情况在 OpenSSL 库中发生过多次,其中 Mac 链接器找到并使用自己的(旧的、不兼容的)OpenSSL 版本,而不是我们请求的版本。
我们不能承受链接器使用库的符号链接,因为这会破坏部署包。
我们想从库的名称中看出我们链接的是静态库还是动态库。
因此,对于我们的特定情况,我们仅使用绝对文件路径并检查它们是否存在。我们删除所有符号链接。
首先,我们找出我们正在使用的操作系统并将其放入 CONFIG 变量中。并且,例如对于 Linux 64 位,则:
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
}
Run Code Online (Sandbox Code Playgroud)
所有依赖项都可以复制到部署包中,因为我们知道它们的文件路径。
归档时间: |
|
查看次数: |
210360 次 |
最近记录: |