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

易日 2016-12-29 02:29:54

QT发布的程序,exe可执行程序与dll文件都在同一个目录下,我现在想把那些dll文件,放到一个文件夹下,这个文件夹和exe在同一个目录下,这样应该怎么做?

望各位路过的大神指点一下

 

 

当前时间:2022年6月16日

时隔多年,再次回到这个帖子。

最近在学习编译QGis源码,发现他的一个方法解决了上述问题。win下可以使用_putenv函数,更改当前进程的环境变量。

参见QGis -> qgis子项目 -> mainwin.cpp ->WinMain()

用法:

//exe_env配置文件:
//path=依赖的dll路径1;依赖的dll路径2

int main()
{
    1、for (var, 逐行读取exe_env配置文件)
    {
        2、_putenv(var);
    }
    3、业务代码
    ...
    return 0;
}

 

...全文
2914 10 打赏 收藏 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
等什么君~ 2020-12-10
  • 打赏
  • 举报
回复
解决了吗,大佬们
D_Future 2017-10-30
  • 打赏
  • 举报
回复
挖个坟,楼主问题解决了么
小灸舞 2016-12-29
  • 打赏
  • 举报
回复
addLibraryPath()是针对插件目录的
易日 2016-12-29
  • 打赏
  • 举报
回复
我用的这个 QCoreApplication::addLibraryPath(绝对路径);
exe直接调用DVPCSHARP_CLR.dll,DVPCSHARP_CLR.dll会调用其他的文件,如DVPCSHARP_CLR.dll
运行异常:
易日 2016-12-29
  • 打赏
  • 举报
回复
引用 4 楼 qq423399099 的回复:
假设DLL在文件夹test下,把这句话加到main.cpp里面。
QCoreApplication::addLibraryPath("./test");

我又两个问题:
1、我的exe调用了DLL1,DLL1又调用DLL2,现在DLL1和DLL2都在test文件夹下,QCoreApplication::addLibraryPath("./test");这样可以吗?
2、我的DLL1和许多其他类型的文件有关,我都放在test文件下了。
按照你提供的方法,在调试时异常找不到DLL2。
  • 打赏
  • 举报
回复
引用 2 楼 u012830675 的回复:
在main中调用SetDllDirectory
#include "mainwindow.h"
#include <QApplication>
#include "Windows.h"
int main(int argc, char *argv[])
{
    QString s = "./DB";
    LPCWSTR path = s.toStdWString().c_str();
    SetDllDirectory(path);

    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}
1 延迟加载dll,exe运行时,先使用SetDllDirectory。 2 使用另外的exe启动,先设置PATH 这是两种方法还是一个方法两个步骤呢? 还有怎么延迟加载dll呢?
2 种方法
小灸舞 2016-12-29
  • 打赏
  • 举报
回复
假设DLL在文件夹test下,把这句话加到main.cpp里面。
QCoreApplication::addLibraryPath("./test");
易日 2016-12-29
  • 打赏
  • 举报
回复
引用 1 楼 akirya 的回复:
1 延迟加载dll,exe运行时,先使用SetDllDirectory。 2 使用另外的exe启动,先设置PATH
可以详细说一下吗?
易日 2016-12-29
  • 打赏
  • 举报
回复
在main中调用SetDllDirectory
#include "mainwindow.h"
#include <QApplication>
#include "Windows.h"
int main(int argc, char *argv[])
{
    QString s = "./DB";
    LPCWSTR path = s.toStdWString().c_str();
    SetDllDirectory(path);

    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}
1 延迟加载dll,exe运行时,先使用SetDllDirectory。 2 使用另外的exe启动,先设置PATH 这是两种方法还是一个方法两个步骤呢? 还有怎么延迟加载dll呢?
  • 打赏
  • 举报
回复
1 延迟加载dll,exe运行时,先使用SetDllDirectory。 2 使用另外的exe启动,先设置PATH
内容概要:本文针对传统彩色数字图像加密算法存在的密钥空间有限、随机性不足及抗干扰能力弱等问题,提出一种结合混沌系统与DNA编码的复合型彩色图像加密解密方案。通过混沌系统生成伪随机序列,对图像RGB三通道像素进行置乱与混淆,并利用DNA编码规则实现信息的高维扩散与并行处理,从而提升加密强度与安全性。文章重点对该方案的抗噪声与抗裁剪性能进行了系统性分析,实验结果表明该算法具备大密钥空间、强加密随机性,且在面对高斯噪声、椒盐噪声干扰及不同程度裁剪攻击时仍能较好恢复图像内容,展现出优良的鲁棒性与实用性。; 适合人群:具备一定图像处理、密码学基础知识的科研人员及研究生,或从事信息安全、多媒体通信领域的技术人员。; 使用场景及目标:①应用于网络环境下的彩色图像安全传输与私密存储,防范信息窃取与篡改;②为高鲁棒性图像加密技术的研究提供理论支持与实验验证,推动复合加密算法在实际工程中的落地应用。; 阅读建议:建议读者结合文中提出的加密流程与实验设计,自行复现算法并对不同类型的图像数据进行测试,重点关注混沌参数敏感性、DNA编码规则选择及不同干扰场景下的解密效果,以深入理解算法的抗干扰机制与优化空间。

24,850

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧