Qt打包程序出现的问题及解决方案

首先声明本人使用的Qt版本是qt-msvc2015_64-5.6.1, Visual Studio版本是VS2015。

紧接着上篇文章Qt系列:用MSVC2015编译常见编译错误及解决方案,本人在实现用Qt和Matlab混合编程(即用VS的编译器把

Matlab中的m文件转化成dll文件 ,再用Qt调用这些dll文件)后用Debug编译成功后运行也没有问题,便想着将Qt程序打包出来,这样就能在别的电脑上运行,而不需要在别人电脑上安装Qt了。本人在打包Qt程序时使用了常用的方法用windeployqt来打包,具体流程参考QT5的程序打包发布,对于一般的程序而言,windeployqt会自动寻找依赖库并拷贝过来,如果按照上述文章操作应该运行是没有问题的。

但是本人的Qt程序里连接了mysql数据库,并且还调用了用VS2015编译器编译的Matlab的dll文件,所以按照上述方法操作以后,运行还是会报错,本人花了三天时间找遍了网上各种资料加不断调试终于找出了解决方案,下面分享一下:

windeployqt只会把你Qt程序所需要的库拷贝过来,但它不会自动拷贝mysql的库,也不会自动拷贝运行Matlab的dll文件所需要的库函数,所以你点击exe可能出现以下错误

Qt打包程序出现的问题及解决方案_第1张图片

ILLE1.dll是我用Matlab的deploytool工具将需要用到的m文件转化成的dll文件,这些dll文件你需要自己添加(复制到与exe同级的目录即可),另外还要加上ssleay32.dlllibeay32.dll,这两个文件在Matlab的安装目录 \bin\win64下。

解决了这一问题,接下来你可以进入,但如果你Qt程序中用到了连接mysql数据库,就要把mysql安装目录\lib\libmysql.dll复制过来。

接下来你可以运行,但中途可能会崩溃,因为一旦遇到要运行matlab的dll文件时还是会崩溃,这是因为打包出来的程序可能没有安装VS的运行时库(你是哪个版本的VS就安装哪个版本的运行时库),我的是VS2015。

解决办法:首先要设置用户变量,在用户变量中新建一个用户变量,图中的变量值应该是你们VS的安装目录\VC,这样做是为了消除命令行里的Warning : Can not find Visual Studio installation directory,VCINSTALLDIR is not set 这个警告的。

Qt打包程序出现的问题及解决方案_第2张图片

然后再用windeployqt重新打包一次程序(记住把原来里面的文件都删掉,重新操作),目的是为了让windeployqt自动添加VS的运行时库到目录中,这样你会多一个这个文件(64或32看你系统位数),如果没有安装此运行库的,就安装它

注意:如果遇到找不到mclmcrrt9_2.dll文件这种错误的,千万别去Matlab安装文件夹

里找这个文件,因为你一旦把这个文件加进来,运行Matlab的dll文件时程序就会崩溃

(我也不知道为什么崩溃,但就是会崩溃),正确的处理方式就是安装上面的这个

vcredist_x64(VS运行库),因为根本就用不到mclmcrrt9_2.dll这个文件。

这样应该差不多就大功告成了,最后展示一下最终生成的目录,画红线的是你所需要加的库文件,最后一个vcredist_x64一定要安装

Qt打包程序出现的问题及解决方案_第3张图片

文章所述内容是本人做项目过程中亲身经历的bug,解决bug后拿出来分享一下,希望能帮到大家。

 

你可能感兴趣的:(Qt系列)