- 主题:怎样让部署的Qt程序目录只含1个exe和plugins目录?
WinDeployqt GuiXxxCreatedByQt.exe,会在GuiXxxCreatedByQt.exe所在目录拷贝一大
堆exe运行所依赖的dll以及plugins、platforms、iconengines、styles和translation
s目录。
通过实验,把platforms、iconengines、styles目录移到plugins目录下,删除用不到的
translations目录,exe仍然可以运行。
但若是把libgcc_s_seh-1.dll、libstdc++-6.dll、libwinpthread-1.dll、Qt5Core.dl
l、Qt5Gui.dll、Qt5OpenGL.dll、Qt5Widgets.dll的任一个移到plugins目录,运行exe
都会提示缺少xxxx.dll的错误。
在GuiXxxCreatedByQt.exe源程序的main函数开头,用stdlib的putenv("PATH=.\plugin
s;"),把plugins目录设置到PATH环境变量里,或者用QApplication::addLibraryPath(
".\plugins"),编译后的exe运行还是不能自动搜索plugins目录下的的dll。
但若是创建一个aa.bat,里面写上set PATH=plugins; \nGuiXxxCreatedByQt.exe,把d
ll都移到plugins目录,运行aa.bat,则exe可以正常运行。
问题来了:不使用bat的方式,仅在exe的main函数里,如何做,才能让编译出来的exe运
行时仅依赖一个plugins目录,而所依赖的dll全在plugins目录下,不在exe目录下?
--
FROM 119.233.180.*
静态编译 qt 程序或许可以解决你的问题。静态编译的时候可以把 qt 的插件一起编译进去。
但是静态编译的话,需要根据 LGPL 开源你的应用程序给你的客户。除非客户是你自己,不然一般没法用这一招。
【 在 callmebbser 的大作中提到: 】
: WinDeployqt GuiXxxCreatedByQt.exe,会在GuiXxxCreatedByQt.exe所在目录拷贝一大
: 堆exe运行所依赖的dll以及plugins、platforms、iconengines、styles和translation
: s目录。
: ...................
--
FROM 183.253.146.*
不知道dll延迟加载行不行。
【 在 callmebbser 的大作中提到: 】
: WinDeployqt GuiXxxCreatedByQt.exe,会在GuiXxxCreatedByQt.exe所在目录拷贝一大
: 堆exe运行所依赖的dll以及plugins、platforms、iconengines、styles和translation
: s目录。
: ...................
--
FROM 123.123.44.*
仿照bat的做法,额外再做一个exe,使用execle或execvpe调用真正的exe并传入修改后
的环境变量
【 在 callmebbser 的大作中提到: 】
: WinDeployqt GuiXxxCreatedByQt.exe,会在GuiXxxCreatedByQt.exe所在目录拷贝一大
: 堆exe运行所依赖的dll以及plugins、platforms、iconengines、styles和translation
: s目录。
: ...................
--
FROM 222.128.5.*