QT - 在.pro文件中指定DLL路径。

9

正如问题标题所述,我特别想知道如何在项目文件中包含.dll文件的路径。我知道最好的做法是将dll文件与项目文件一起包含,但我仍然想知道是否有可能做到这一点?

目前我的.pro文件包括以下内容;

QT       += core gui

TARGET = Test
TEMPLATE = app

win32 {
    INCLUDEPATH += "D:/Projects/Build Output/include/"

    CONFIG(debug, debug|release) {
        LIBS += "D:/Projects/Build Output/libs/debug/myLib.lib"
        LIBS += "D:/Projects/Build Output/bin/x86 debug/myLib.dll"
    } 
    else {
        LIBS += "D:/Projects/Build Output/libs/release/myLib.lib"
        LIBS += "D:/Projects/Build Output/bin/x86 release/myLib.dll"
    }
}

SOURCES += main.cpp\
    mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

很酷,知道它可以做到,谢谢你的帮助:)。


2
据我所知,您已经正确地包含了它们,可能是其他地方出了问题。 - Rapptz
3个回答

4

如果您希望生成的exe文件在运行时能够自动找到其依赖的dll文件,则对于隐式dll链接(即使用.lib文件进行链接,如您的示例中所示),这是无法实现的。Windows有一个固定的搜索顺序来定位必要的dll文件。这些搜索顺序都不能放入QT pro文件中。因此下面的语句没有效果只是让QT知道在该路径中搜索dll的.lib/.a文件:

 LIBS += "D:/Projects/Build Output/bin/x86 debug/myLib.dll"

最接近的方法可能是将dll路径定义为pro文件中的宏。然后在您的c / c ++源文件中使用LoadLibrary从这些路径显式加载dlls。当然,只有在您可以接受显式链接而不是隐式链接时才能这样做。

1
谢谢你的回答 :). 我问这个问题主要是因为我一直在看YouTube上的voidRealms QT视频。在他稍早的视频中,他做了上述操作,并且它可以正常工作。(具体视频链接:http://www.youtube.com/watch?v=9JTooLxhmC0) 所以我只是好奇为什么它对我不起作用。
  • 在他的视频中,他确实像我一样使用了共享库,但我想可能由于它只有不到1年的时间,某些东西已经改变了?
- Danran
4
在视频的4分20秒处,他手动将dll复制到exe目录中,这就是为什么它对他有效的原因 :) - Penghe Geng
我有没有机会在我的应用程序开始搜索DLL之前更改PATH变量? - KcFnMi

2
你不需要在.pro文件(Windows)中放置dll路径。你只需要将所有外部dll文件放在一个目录中,并将此目录添加到路径环境变量中(与已接受的答案相同)。我在这里补充一点重要的事实:为了重新加载新的PATH环境变量,必须重新启动QT CREATOR才能使其正常工作。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接