qt发布程序时将依赖的dll分开放在不同目录下

本文最后更新于:2022年5月29日 上午

前言

QT发布的程序,exe可执行程序与dll文件都在同一个目录下,这样根目录看上去很混乱,不方便后续升级管理,现在想把那些dll文件,放到一个文件夹下,这个文件夹和exe在同一个目录下。网上搜索了许多资料,都没有找到实际有用的信息,不过从网上混乱的资料中,最终还是筛选到了一些有用的信息资料,本文记录以下具体的实现方法。

系统环境:

  • Windows 10
  • Qt5.9.3

方法

这里采用了使用另一个exe来启动应用程序,启动前临时设置环境变量,使程序可以找到需要的依赖库路径。该方法设置的环境变量是临时的,并不会永久修改系统环境变量,这样也符合需求。

主要实现方法是通过QProcess使用setProcessEnvironment环境变量

新建一个Qt Console Application工程,把下面代码复制进去即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <QCoreApplication>
#include <QProcess>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

QProcess *myProcess = new QProcess();
// dll路径,放在exe目录下的子文件夹lib下
QString path = QCoreApplication::applicationDirPath() + "/lib;"
+ qgetenv("PATH");

qputenv("PATH", path.toStdString().c_str());
myProcess->start("App.exe");

// return a.exec();
}

这里运行时可能会有黑色qt控制台弹窗显示,把pro文件CONFIG += console 删掉即可不显示弹窗。

参考链接

【1】解决QProcess使用setProcessEnvironment环境变量不能生效的问题 - 云+社区 - 腾讯云 (tencent.com)


qt发布程序时将依赖的dll分开放在不同目录下
https://kevinloongc.github.io/posts/8ca26d8c.html
作者
Kevin Loongc
发布于
2021年7月1日
许可协议