将外部库添加到Qt Creator项目中
如何将外部库添加到由Qt Creator RC1(版本0.9.2)构建的项目中? 例如,win32函数EnumProcesses()
需要将Psapi.lib
添加到要构建的项目中。
正确的做法是这样的:
LIBS += -L/path/to -lpsapi
这样,它将在Qt支持的所有平台上工作。 这个想法是,你必须将目录从库名(不带扩展名,没有任何'lib'前缀)分开。 当然,如果你包含一个Windows特定的lib,这真的没关系。
如果你想把你的lib文件存储在项目目录下,你可以用$$_PRO_FILE_PWD_
变量引用它们,例如:
LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi
你在使用qmake
项目吗? 如果是这样,您可以使用LIBS
变量添加外部库。 例如:
win32:LIBS += path/to/Psapi.lib
LIBS + = C:\ Program Files \ OpenCV \ lib
将无法正常工作,因为您在Program Files中使用了空格。 在这种情况下,您必须添加引号,所以结果将如下所示: LIBS + =“C:\ Program Files \ OpenCV \ lib” 。 我建议将库放在非空白位置;-)
您的意思是错误是由于缺少额外的包含路径。 尝试添加它:INCLUDEPATH + = C:\路径\到\包含\文件\希望它的作品。 问候。
并添加多个库文件,你可以写如下:
/ DebugLibrary / VTK /通用E:/ DebugLibrary / VTK /过滤E:/ DebugLibrary / VTK / GenericFiltering E:/ DebugLibrary / VTK /图形E:/ DebugLibrary / VTK / GUISupport / Qt E:/ DebugLibrary / VTK / Hybrid E:/ DebugLibrary / VTK / Imaging E:/ DebugLibrary / VTK / IO E:/ DebugLibrary / VTK / Parallel E:/ DebugLibrary / VTK / :/ DebugLibrary / VTK / VolumeRendering E:/ DebugLibrary / VTK / Widgets E:/ DebugLibrary / VTK / Wrapping
LIBS * = -LE:/ DebugLibrary / VTKBin /斌/释放-lvtkCommon -lvtksys -lQVTK -lvtkWidgets -lvtkRendering -lvtkGraphics -lvtkImaging -lvtkIO -lvtkFiltering -lvtkDICOMParser -lvtkpng -lvtktiff -lvtkzlib -lvtkjpeg -lvtkexpat -lvtkNetCDF -lvtkexoIIc -lvtkftgl -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGenericFiltering
如果您想在客户机器上部署您的应用程序,而不是仅仅使用您的应用程序,我们会发现LIBS+= -Lxxx -lyyy
方法会导致混淆,如果没有问题的话。
我们使用Qt开发Linux,Mac和Windows的应用程序。 我们提供完整的,独立的应用程序。 因此,所有非系统库都应该包含在部署包中。 我们希望我们的客户能够从所有操作系统的相同USB记忆棒上运行应用程序。 由于平台兼容性原因,USB盘必须格式化为不支持(Linux)符号链接的FAT32。
我们发现LIBS+= -Lxxx -lyyy
成语太多了:
-
我们不完全知道链接器找到的(静态或动态)库的文件路径。 这是不方便的。 我们的Mac链接器经常发现与我们认为应该使用的库不同的库。 这发生了几次与OpenSSL库Mac连接器找到并使用自己的 – 旧的,不兼容的 – OpenSSL版本,而不是我们所要求的版本。
-
我们不能承受链接器使用符号链接到库,因为这会破坏部署包。
-
我们希望从图书馆的名字中看到我们是连接一个静态还是动态的库。
所以对于我们的特定情况,我们只使用绝对文件路径并检查它们是否存在。 我们删除所有符号链接。
首先我们找出我们正在使用什么操作系统,并把它放在CONFIG变量中。 而且,例如对于Linux 64bit,则:
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 }
所有的依赖关系都可以复制到部署包中,因为我们知道它们的文件路径。
我想添加一些完整的东西,你也可以只添加一个库文件路径,在那里它将寻找一个依赖库(可能不是直接在你的代码中引用,但是你使用的库可能需要它)。
为了比较,这将对应于LIBPATH环境的作用,但是它在Qt Creator中是一种晦涩难懂的形式,没有很好的文档记录。
我来这里的方式如下:
LIBS += -L"$$_PRO_FILE_PWD_/Path_to_Psapi_lib/"
实质上,如果您不提供实际的库名称,则会将路径添加到搜索相关库的位置。 语法上的差别很小,但是提供PATH在哪里查找相关库非常有用。 有时只是提供每个路径的个人图书馆,你知道他们都在一定的文件夹和Qt造物主将拿起他们的痛苦。