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

 

...全文
2868 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

24,851

社区成员

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

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