如何解决Qt程序在其他电脑上无法运行的问题(Qt程序打包发布)

时间:2023-02-21 07:55:29

这几天在研究Qt,首先尝试用Qt Creator编写一些小程序来练练手。但是,在这个过程中却遇到了一个问题:使用Qt Creator编写的exe程序,只能在本机运行,跑到别的电脑上就无法运行了,提示缺少各种各样的库。这个问题,我之前在搞VS-MFC的编程时,也遇到过,无非就是一些运行时库的问题导致的。当时的做法时,根据程序运行时报错所缺失的库,一个一个手工查找和拷贝,收集全部所依赖的库到程序目录下,程序就可以正常运行了。因此,对于这次的情况,我原本也打算这么做。但是,无意间在一篇博客里看到,Qt的设计者其实一早就料到有这种情况发生的,所以,他们为Qt专门设计了一个发行程序时自动对依赖库打包的工具,可以全自动为用户完成上述工作,那可就方便多了。下面就对这个工具的用法进行介绍:

1、首先找到这个工具,这个工具叫做“windeployqt”。它一般位于Qt安装目录下的mingw_XX\bin目录下,像我的目录就在C:\ProgramData\Qt\5.8\mingw53_32\bin。

此时,建议将整个目录直接加入系统环境变量,便于后续使用。

2、编译你的程序,注意必须是release版本。debug版本的貌似不行。

3、启动cmd,进入到你要发布的程序所在的目录,比如我的程序放在D:\Test目录下,就输入”cd /d d:\test”,记住里面一定要加”/d”的参数,否则将无法进入该目录。

4、确认你的程序是用Qt Creator哪个模式设计的,总共有2个模式,Qt Widgets Application和Qt Quick Application,不同模式下的参数命令是不一样的:

  • 在Qt Widgets Application模式下

输入”windeployqt hello.exe”命令,其中hello.exe是我的程序名称。

  • Qt Quick Application模式下

输入”windeployqt hello.exe –qmldir”命令, 其中hello.exe是我的程序名称,qmldir是你的qml目录,这个目录一般位于mingwXX目录下,像我的目录就在C:\ProgramData\Qt\5.8\mingw53_32\qml。

5、输入上述命令之后,Qt就会自动复制它所依赖的各个插件文件夹和 dll文件、qm文件,得到的就完整的 exe 程序发布集合,依赖关系都解决好了,可以直接发布到其他的电脑上运行。

6、要注意的是,按照上述步骤完成之后,仍有可能会提示dll缺失信息,像我就遇到了缺失的提示。不过,好在此时缺失的dll很少(我遇到的就只有3个:libwinpthread-1.dll、libstdc++-6.dll、以及libgcc_s_dw2-1.dll),可以手动去复制,根据我的经验,可以直接在C:\ProgramData\Qt\5.8\mingw53_32\bin目录下面找到这几个dll。

7、其他未尽事项,建议大家参考以下这篇博文,介绍的非常详细。

http://blog.csdn.net/liuyez123/article/details/50462637

8、搞定,收工!