概述
qt 5 +mysql5.7打包出现driver not loaded的问题,并且在自己pc能正常工作其他pc不能工作
本人新手入门,希望这篇文章会对你有所帮助
阅读本文请先参考环境
环境:
1.
打包工具windeployqt 这是qt自带的打包工具在你安装
目录下的
D:qt_insert5.15.0mingw81_32bin目录,因不同版本不同安装位置有所 差异但大致一样。
2.
mysql 5.7版 32位的qsqlmysql.dll这个动态库 这是自己编译的这里 具体编译流程不在赘述,还有libmysql.dll这个动态库注意这个和qsqlmysql.dll是配套的也就是版本号要一致,libmysql.dll位于mysql安装目录下的lib目录下
3.
mingw81_32位编译器+win64
正题:
网络上大多文章都在讲是建一个pugins再在里面创建sqldrives在吧qsqlmysql.dll插件放到里面(现在qt5打包的时候已经可以自己创建sqldrivers目录并放入插件所以不用管也是访问到插件的)或者直接插件放到exe同级目录下再或者是添加如下代码 :
QStringstr LibPath(QDir::toNativeSeparators(QApplication::applicationDirPath() )
+ QDir::separator()+"plugins");
QApplication::addLibraryPath(strLibPath);
等等都还是会出现 driver not loaded,包括加入ssleay32.dll,libeay32.dll等的dll文件也还是一样。注:你打包好发现exe同级目录下有sqldrivers目录且有你需要的插件就好了根本不需要在作其他处理。
于是我就用了process explorer软件用来查找依赖库,查找到缺少msvcr120.dll和msvcp120.dll者两个文件如下:
于是我就从本机systam32目录下的这两个文件拷贝到了我exe的同级目录下发现还是只能在自己电脑上运行在其他电脑上却还是报driver not loaded错误,原因是因为systam32目录下的dll并不是32位的,得从syswow64这个目录下拷贝msvcr120.dll和msvcp120.dll到exe同级目录下才可以,别忘了吧之前的libmysql.dll也要拷贝到exe同级目录下哦,然后就能连接上数据库了其他pc也可以正常运行了,
为什么syswow64目录下拷贝可以system32却不行原因如下:
在32位操作系统的Windows文件夹中,SYSTEM和SYSTEM32两个文件夹,分别用来存放16位和32位的DLL文件。现在16和32位都有存放位置那么64位放哪里呢system64?其实不然64位还是放到system32这个文件夹下的,所以无论是32位还是64位的DLL文件都是放到了System32文件夹中。
那SysWoW64文件夹又是干什么用的呢?这是因为32位软件并不能在64位系统中直接运行,所以微软设计了WoW64(Windows-on-Windows 64-bit),通过Wow64.dll、Wow64win.dll、Wow64cpu.dl三个DLL文件进行32位和64位系统的切换来运行32位软件。所以syswow64下面的dll才栓我们真正需要的文件
补充:
对于高版本mysql编译出来的库依赖于下面的库,而qt打包并不会打入以下库从而形成该现象
参考自:https://www.ssdax.com/196.html
最后
以上就是负责猫咪为你收集整理的qt + mysql打包发布后出现driver not loaded(均是32位)的全部内容,希望文章能够帮你解决qt + mysql打包发布后出现driver not loaded(均是32位)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复