我在Windows的Qt项目中包含一个外部库。 构建过程可以完美运行,但是当我尝试运行代码时,它会失败。
我知道失败的原因是链接库DLL路径未包含在PATH环境变量中,也未包含在可执行路径中。
一种解决方案可以是将DLL路径添加到PATH环境变量中,或者将DLL复制到执行路径中,但是我想避免这些并找到一种自动化的解决方案。
我知道可以在.pro文件中添加一个INSTALL命令,因此,如果我将构建命令make install
添加到构建序列中,则指定的依赖项将被复制到执行路径中。有人可以给我一个例子吗?我用于包含库的代码如下:
message(Importing SAT-Sdk)
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../SDK/dist/SAT-Sdk/lib/ -lsat_sdk
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../SDK/dist/SAT-Sdk/lib/ -lsat_sdkd
else:unix: LIBS += -L$$PWD/../../../SDK/dist/SAT-Sdk/lib/ -lsat_sdk
INCLUDEPATH += $$PWD/../../../SDK/dist/SAT-Sdk/include
DEPENDPATH += $$PWD/../../../SDK/dist/SAT-Sdk/include
另一种解决方案可以是指定DLL的路径,将DLL添加命令到预配置的运行设置中,但是我不知道确切的语法。谁能给我一个例子吗?
感谢您的帮助
答案 0 :(得分:1)
您可以在项目的Build Environment或Run Environment中设置PATH环境变量。例如,请参见this project。
答案 1 :(得分:1)
您可以按照https://doc.qt.io/qt-5/qmake-advanced-usage.html#installing-files中所述将文件添加到install
目标。您可能只需添加以下内容:
target.files += $$PWD/../../../SDK/dist/SAT-Sdk/lib/sat_sdk.dll
尽管lib文件名可能取决于目标平台和Windows上的调试/发行版(带有后缀“ d”的后缀)。我个人将所有这些设置在某个中央位置,因此不需要重复所有这些路径。下面的示例(未经测试的YMMV,有很多方法可以执行此操作,等等:)
SAT_SDK_PATH = $$PWD/../../../SDK/dist/SAT-Sdk
SAT_SDK_LIB_PATH = $$SAT_SDK_PATH/lib
SAT_SDK_LIB = sat_sdk
win32:CONFIG(debug, debug|release):SAT_SDK_LIB = $${SAT_SDK_LIB}d
win32:SAT_SDK_LIB_BIN = $${SAT_SDK_LIB}.dll
else:SAT_SDK_LIB_BIN = lib$${SAT_SDK_LIB}.$${QMAKE_EXTENSION_SHLIB}
LIBS += -L$$SAT_SDK_LIB_PATH -l$$SAT_SDK_LIB
INCLUDEPATH += $SAT_SDK_PATH/include
DEPENDPATH += $SAT_SDK_PATH/include
target.files += $$SAT_SDK_LIB_PATH/$$SAT_SDK_LIB_BIN
target.path = #install path ...
!isEmpty(target.path): INSTALLS += target