将外部库添加到Qt Creator项目中

时间:2009-04-05 06:08:15

标签: c++ winapi qt qt-creator

如何将外部库添加到由Qt Creator RC1(版本0.9.2)构建的项目中?例如,win32函数EnumProcesses()需要在要构建的项目中添加Psapi.lib

8 个答案:

答案 0 :(得分:208)

这样做的正确方法是:

LIBS += -L/path/to -lpsapi

这种方式适用于Qt支持的所有平台。这个想法是你必须将目录与库名分开(没有扩展名,没有任何'lib'前缀)。当然,如果你包含一个Windows特定的lib,这真的没关系。

如果您想将lib文件存储在项目目录中,可以使用$$_PRO_FILE_PWD_变量引用它们,例如:

LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi

答案 1 :(得分:22)

您使用的是qmake项目吗?如果是这样,您可以使用LIBS变量添加外部库。 E.g:

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

答案 2 :(得分:11)

  

LIBS + = C:\ Program Files \ OpenCV \ lib

将无效,因为您在Program Files中使用了空格。在这种情况下,您必须添加引号,因此结果将如下所示: LIBS + =“C:\ Program Files \ OpenCV \ lib”。 我建议将库放在非空白区域; - )

答案 3 :(得分:6)

您指的错误是由于缺少其他包含路径。 尝试添加: INCLUDEPATH + = C:\ path \ to \ include \ files \ 希望它有效。 问候。

答案 4 :(得分:4)

要添加多个库文件,您可以按如下方式编写:

  

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 /渲染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 -lvtkexoIIc -lvtkftgl -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGenericFiltering

答案 5 :(得分:3)

如果您想在客户的计算机上部署应用程序,而不是仅自己使用您的应用程序,我们发现LIBS+= -Lxxx -lyyy方法可能会导致混淆,如果不是问题。

我们使用Qt为Linux,Mac和Windows开发应用程序。我们提供完整的独立应用程序。因此,所有非系统库都应包含在部署包中。我们希望我们的客户能够从所有操作系统的相同USB记忆棒运行应用程序。出于平台兼容性的原因,USB记忆棒必须格式化为FAT32,不支持(Linux)符号链接。

我们发现LIBS+= -Lxxx -lyyy成语过多的黑匣子:

  1. 我们并不完全知道链接器找到的(静态或动态)库的文件路径是什么。这很不方便。我们的Mac链接器经常发现libs与我们认为应该使用的库不同。这种情况多次发生在OpenSSL库中,其中Mac链接器发现并使用了自己的 - 较旧的,不兼容的 - OpenSSL版本而不是我们要求的版本。

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

  3. 我们希望从库的名称看到我们是否链接静态库或动态库。

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

    首先,我们找出我们正在使用的操作系统,并将其放在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
    }
    

    所有依赖项都可以复制到部署包中,因为我们知道它们的文件路径。

答案 6 :(得分:1)

为了完整起见,我想补充一点,你也可以只添加LIBRARY PATH,它将寻找一个从属库(可能不会在你的代码中直接引用,但你使用的库可能需要它)。

为了进行比较,这将对应于LIBPATH环境所做的事情,但它在Qt Creator中的模糊性并没有很好地记录。

我遇到这种情况的方式如下:

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

基本上,如果您没有提供实际的库名称,它会添加搜索依赖库的路径。语法上的差异很小,但这对于仅提供寻找依赖库的PATH非常有用。有时只是为每个路径提供单独的库,你知道它们都在某个文件夹中,并且Qt Creator会接收它们。这只是一种痛苦。

答案 7 :(得分:0)

在.pro中:LIBS += Ole32.lib OleAut32.lib Psapi.lib advapi32.lib

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

#pragma comment(lib,"psapi.lib")
相关问题