请教QT添加外部dll的路径问题?

逍遥九剑-_- 2016-05-02 05:24:49
使用QT写了个程序调用一个自己写的dll库,最终生成的exe和dll文件不在同一个目录里面
但是我在工程pro文件添加了dll的路径,运行exe时却找不到这个dll文件!

win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../plugins/emptygadget/release/ -lemptygadget
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../plugins/emptygadget/debug/ -lemptygadget
else:unix: LIBS += -L$$OUT_PWD/../plugins/emptygadget/ -lemptygadget

INCLUDEPATH += $$PWD/../plugins/emptygadget
DEPENDPATH += $$PWD/../plugins/emptygadget

还测试了一下,直接把*.dll文件放到跟exe同一目录下可以正常运行的,这说明dll是没有问题的。
求教?
...全文
4034 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mantis_4545 2017-12-27
  • 打赏
  • 举报
回复
LIBS 只是指定查找dll或.a进行编译的路径, 并不决定exe加载dll时的查找路径
xjl7488562 2017-12-17
  • 打赏
  • 举报
回复
把你编的dll放到系统环境变量下,点击exe就能运行
张小飞Official 2017-11-13
  • 打赏
  • 举报
回复
你debug release pro文件中分别都有么?
亭台六七座 2017-11-12
  • 打赏
  • 举报
回复
在调试模式以 build-*文件夹为当前目录, 直接运行exe以exe所在目录为当前目录
hidxl 2017-11-11
  • 打赏
  • 举报
回复
用 QLibrary动态加载动态库.
灰机不灰机 2017-11-09
  • 打赏
  • 举报
回复
楼主解决了吗,我也遇到这样的问题,能告诉我这是为什么吗?
Davidsdu 2016-05-03
  • 打赏
  • 举报
回复
我记得debug和release生成的库不能使用同一个名字,所以我在写的时候debug后面加了一个“-d”表示区分。这个库的名字实际上是自己指定的。 在生成动态库的pro文件中这么写: CONFIG(debug,debug|release){ TARGET = _Label_d #指定生成的应用程序名 } else { TARGET = _Label #指定生成的应用程序名 } 表示debug生成的库名为_Label_d.dll release生成的库名为 _Label.dll 然后再.app的pro文件中调用动态库的时候这么写: Release: LIBS += -L./ -l_Label Debug: LIBS += -L./ -l_Label_d
逍遥九剑-_- 2016-05-02
  • 打赏
  • 举报
回复
想把问题搞清楚了 我把编译顺序再恢复,让emptywidget先编app后编,工程就能顺利编过了 这说明我的这几句添加库的语句和库的路径是正确的 win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../emptywidget/release/ -lemptywidget else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../emptywidget/debug/ -lemptywidget else:unix: LIBS += -L$$OUT_PWD/../emptywidget/ -lemptywidget 为什么编译的时候能够根据路径找到对应的库,而双击运行exe的时候反而找不到库文件了! 请教大家,难道程序运行时,exe文件必须要跟dll文件在同一个目录下才能正常调用吗? 或者还需要另外在环境变量里面添加库的路径才能正常运行exe吗?
dinazhuo88 2016-05-02
  • 打赏
  • 举报
回复
楼主,我也遇到了类似的问题,最后直接把exe和dll文件放在一个目录里面就好了,懒得管这个问题了
逍遥九剑-_- 2016-05-02
  • 打赏
  • 举报
回复
app是应用程序,emptywidget是dll库工程 在app代码里面调用到了emptywidget.dll的函数,要依赖于emptywidget.dll才能编译 我做了一个测试,把编译结果全部清零,重新编译,让app先编emptywidget后编 结果出现“:-1: error: cannot find -lemptywidget”
逍遥九剑-_- 2016-05-02
  • 打赏
  • 举报
回复
贴上我的工程结构图

逍遥九剑-_- 2016-05-02
  • 打赏
  • 举报
回复
release编译出来的,运行exe也是这样的问题,同样是缺少dll。 对了请问你debug模式下编译出来的是带_d.dll后缀的库文件吗? 为什么我debug模式下编译出来的库文件不带_d后缀,这两者有什么区别吗?
Davidsdu 2016-05-02
  • 打赏
  • 举报
回复
CONFIG += build_all #/即表示会生成所有的版本 CONFIG(debug,debug|release){ TARGET = _Label_d #指定生成的应用程序名 } else { TARGET = _Label #指定生成的应用程序名 } Release: LIBS += -L./ -l_Pushbutton Debug: LIBS += -L./ -l_Pushbutton_d 我是这么用的,没有问题。估计可能还是路径的问题,你直接双击release出来的应用程序看能不能行?
逍遥九剑-_- 2016-05-02
  • 打赏
  • 举报
回复
很奇怪的是,我再qt creator里面debug运行程序没有问题 在资源管理器里面点击exe运行程序则总是提醒我缺失该XXX.dll,必须要将dll文件和exe文件放在一起才能运行
逍遥九剑-_- 2016-05-02
  • 打赏
  • 举报
回复
主要参考的下面的教程 http://www.tuicool.com/articles/eEzyiiY
逍遥九剑-_- 2016-05-02
  • 打赏
  • 举报
回复
运行exe时,总是说 “无法启动该程序,因为计算机中丢失emptygadget.dll” 提示我找不到那个dll文件,难道libs路径添加有问题?

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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