想要不依赖QT环境,在其它电脑里直接双击exe文件就可以运行当前程序。具体打包过程如下:
-
使用QT编译出release版本的exe
-
release版本运行无误后,需要找到当前构建生成的exe所在文件夹
可以看到具体目录在这里
我在该目录下的bin文件夹里找到了可执行的exe文件
-
在其它地方新建一个文件夹,将该exe文件复制进去
-
在开始菜单中找到Qt命令终端,(需要与刚刚构建时使用的版本一致),然后打开(最好不要以管理员身份运行,听说以管理员运行会优先找系统环境变量里的可执行文件,而不是当前目录下的可执行文件。)
-
将目录切到刚刚新建的文件夹下
-
执行指令windeployqt InertSim.exe,也就是
windeployqt+空格+exe的名字
但是会报错,说找不到一个依赖库。是关于QtCharts的一个dll,我在代码里确实用到了Charts来画图。
我在所给的目录下确实没有找到Qt5Charts_conda.dll,全局搜索了一下,发现只有在D:\anaconda3\Library\bin目录下有该dll
注意一下,这个QtCharts的后缀是conda。我在这里用Qt跟conda没有什么关系。也就是如下这两个软件都存在于我的电脑,但是两个并没有什么关联,一个是搞C++的,一个是搞Python的。
原因:
Anaconda 中环境带有pyqt包时,可能通过环境变量查找到相关bin目录,并在其中寻找依赖库,从而冲突
解决:
请看这位博主的文章。。https://blog.csdn.net/cramming/article/details/129672845
我觉得该博主记录的有道理,但是我改了后电脑也重启了,还是不行,会报同样的错误,也不知道是什么原因。
所以我换了一个没有anaconda只有qt的电脑进行运行windeployqt InertSim.exe打包,最后是成功的。
-
我们看看刚刚新建的目录,可以看到多了很多文件,这些文件都是windeployqt自动检索到运行InertSim.exe需要的配合文件,会自动复制到这里。
-
如果自己的程序里没有引入其它外部文件,就可以直接双击这个exe运行了。到此打包过程已经完全结束。
但是我的代码里还要读入其它文件才能配合运行,比如在之前QT编译出来的exe的同级目录下就有我引入的外部DualSPHysics文件夹和ParaViewFilters.xml文件。
所以现在也需要把它们复制到我新建的文件夹下
如果还引入了其它dll,一定要添加全,要不然在其他人的电脑里运行会报错,有时候会直接报错缺少哪个dll(报错类型1),有时候会报一串代码序号(报错类型2)。如下图,都是我遇到的报错,都是因为dll引入不全或者不正确。
引入dll齐全后,现在双击InertSim.exe就可以运行啦!自己测试,直接发送到别人没有安装QT的电脑里也可以打开运行!