成功了!
花了两天时间研究为什么发布程序的时候,目标机连接不上主机的MySql数据库。原来是程序的问题!申明数据库的驱动放在了全局变量,导致了编译的时候已经连接数据库驱动,然后执行的时候肯定找不到驱动了。
这么一说也就解决了为什么在exe同目录下放置了plugins/sqldrivers/qsqlmysql4.dll或者直接放dll文件在plugins下甚至同目录下,然后在main函数里添加那条QCoreApplication::::addLibraryPath(strLibPath);没用,在同目录下写qt.conf没用的(注意这里不是说这些是废的噢)情况。
现在来详细说说整个流程吧。按照我遇到问题的始末来说
我第一个碰到的问题就是没编译好qsqlmysql4.dll,这样会直接在生成release的时候,提示找不到驱动。我就返回到编译MySql的步骤来编译release版本的驱动,我贪图方便,用Qt creator直接载入 Qt安装目录/src/plugins/sqldrivers 下的mySQl.pro文件,然后把Mysql的include和lib文件都放在Qt相应的目录下面,反正提什么错误就改什么,呵呵,弄多了就不怕错误了,最后编译完了去到编译出来的release目录下果然找到了qsqlmysql4.dll和qsqlmysql4.lib。注意不是.a文件,.a的是mingw编译器编译产生的。
至于整个编译的过程,一搜就有了,而且要根据个人情况来配置,啰嗦也没用。最主要的是要知道哪些步骤,这个在Qt的帮助文档里搜SQL database driver,根据文档来操作就行了。而且要体会编译的理念,这个不是别人一说,或者给几条命令就懂了的,还是要经过大量的运用,才能很好的解决,不然出现什么错误提示又要百度了。
接下来,我生成release了,在本地运行没出错。但是在发给别的电脑后,无论把复制qsqlmysql4.dll到什么地方,都给我报driver not load的错误,之后我看到某哥的文章,说“总不能把我的Qt开发环境都装在别人的电脑上吧”,我一想,就马上改了一下自己的Qt的路径,在我的电脑上果然出错了!然后再慢慢细化目录,发现就是 Qt安装目录/plugins/qsqldrivers目录下一定要有qsqlmysql4.dll才行。经过实验,在别的电脑下也新建了这个路径,把文件放进去了。果然没出错!我的乖乖,这样就说明了驱动是没问题的,数据库连接是没问题的!只是发布包里找不到驱动的路径。
然后我狂找相关的资料,发现要解决这个路径的问题,有两个方法:
第一个方法:在程序的同目录下新建个路径plugins/sqldrivers/,里面放qsqlmysql4.dll,然后在main函数中加上
QString strLibPath(QDir::toNativeSeparators(QApplication::applicationDirPath())+QDir::separator()+"plugins");
qApp.addLibraryPath(strLibPath);
这两句话
第二个方法:在同目录下新建一个文本文档,写入
[Paths]
Prefix = .
Plugins = plugins
保存为qt.conf,
Qt程序启动时会用QLibraryInfo类载入qt.conf文件, 按下面的路径顺序搜索 :
- 资源系统, :/qt/etc/qt.conf
- 执行档所在目录,如:QCoreApplication::applicationDirPath()+QDir::seperator()+”qt.conf”