将外部库添加到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成语太多了:

  1. 我们不完全知道链接器找到的(静态或动态)库的文件路径。 这是不方便的。 我们的Mac链接器经常发现与我们认为应该使用的库不同的库。 这发生了几次与OpenSSL库Mac连接器找到并使用自己的 – 旧的,不兼容的 – OpenSSL版本,而不是我们所要求的版本。

  2. 我们不能承受链接器使用符号链接到库,因为这会破坏部署包。

  3. 我们希望从图书馆的名字中看到我们是连接一个静态还是动态的库。

所以对于我们的特定情况,我们只使用绝对文件路径并检查它们是否存在。 我们删除所有符号链接。

首先我们找出我们正在使用什么操作系统,并把它放在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造物主将拿起他们的痛苦。