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;
}

 

...全文
2885 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
内容概要:本文系统研究了在强弱电网适配场景下,构网型(GFM)与跟网型(GFL)逆变器并联系统的协同控制逻辑及其暂态动态行为,重点依托Simulink仿真平台构建混合并网系统模型,深入分析两类逆变器在不同电网强度条件下的交互特性、频率响应机制、稳定性表现及抗扰能力。研究涵盖分层控制架构设计、异构控制策略对比、频率扰动响应规律以及多工况暂态性能评估,探讨了GFM与GFL逆变器在功率支撑、电压频率调节和系统稳定性方面的互补性与协同机制,旨在提升高比例新能源接入背景下并网系统的适应性、鲁棒性与动态性能。; 适合人群:具备电力电子、新能源并网、自动控制或电力系统仿真等相关专业知识背景,从事新型电力系统控制、微电网运行、逆变器控制策略研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解构网型与跟网型逆变器在强弱电网中的协同工作机理与动态交互特性;②掌握异构逆变器并联系统的建模方法、协同控制策略设计与暂态仿真分析流程;③为高渗透率新能源系统的稳定性分析、控制优化及工程应用提供理论依据和技术参考。; 阅读建议:建议结合Simulink仿真实例进行动手实践,重点关注控制策略的实现细节、参数整定方法及多工况仿真结果的动态响应分析,同可参考文中提及的相关博士论文复现案例以深化对理论机制的理解。

24,851

社区成员

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

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