zoukankan      html  css  js  c++  java
  • Qt 5.2中编译加载MySQL数据库驱动问题的总结

    背景:

      本科毕业设计涉及图形界面与数据库查询。选择使用Qt实现图形界面编程,使用MySQL构建数据库。之前安装了Qt 5.2,后来又安装了MySQL Server 5.6 (FULL完全安装)。接着就遇到了" QMYSQL driver not loaded "的问题。

    参考网站:

      <http://mobile.51cto.com/symbian-273258.htm>

      <http://mobile.51cto.com/symbian-268134.htm>

      <http://1029975378-qq-com.iteye.com/blog/1310910>

      <http://blog.sina.com.cn/s/blog_74a7e56e01017s64.html>

      <http://blog.csdn.net/styyzxjq2009/article/details/8131917>

      <http://qt-project.org/doc/qt-5/sql-driver.html>

      我之所以参考这么多的网站,是因为他们的整体思路都一样,但是都解决不了我的问题,但是都能对我解决问题有所启发。

    解决问题的过程:

    一 )准备阶段:

      1. 安装Qt(我的是5.2版本,主目录C:QtQt5.2.15.2.1mingw48_32),主目录中只有一个mingw48_32文件夹。并不是什么“qtplugins...”,也没有“.../src/plugins/...”。所以,根据参考,我去Qt官方网站下载了Qt5.2的源码包“qt-everywhere-opensource-src-5.2.1.zip”。解压后放在了“C:Qt”文件夹下,并重命名为"Sources"。如下图:

      

    在"Sources"文件夹中找到了接下来要工作的目录:“C:QtSourcesqtbasesrcpluginssqldriversmysql”。里面有需要的lib文件和pro文件。

      2. 安装MySQL(我的是5.6版本,原先安装在“C:Program Files”下,但是考虑到参考中提到的“文件夹命名不能有空格”,于是重新安装在“C:MySQL”中)。我安装的是“FULL”,完整安装,所以,安装目录“C:MySQLMySQL Server 5.6in”还是避免不了空格。于是,仿照参考中的指示,重新新建文件夹“E:MySQL”,将“C:MySQLMySQL Server 5.6in”中的“include”和“lib”文件夹拷贝到里面。可是我的“lib”文件夹里并没有“opt”子文件夹。但是,有"libmysql.dll",那就足够了不是么?

      3. 下载动态库格式转换工具,网址为: http://www.qtcn.org/download/mingw-utils-0.3.tar.gz,解压后把里边bin目录里的remip.exe拷到“C:QtQt5.2.15.2.1mingw48_32in”目录里。同时,为了保险起见,我还特地下载安装了“MinGW”,并且将刚刚的remip.exe文件也复制了一份放在了“C:MinGWin”文件夹中。

    二) 开整

      1. 通过“E:MySQLliblibmysql.lib”生成libmysql.a文件

      打开Qt自带的命令行程序(我用的是win8.1,所以在Qt的菜单目录里能找到,不管是什么系统,这个“Qt 5.2.1 for Desktop (MinGW 4.8 32bit)”程序都应该能在Qt Creator的菜单图标周围找得到。)在命令行窗口中切换到工作目录“E:MySQLlib”:

      

    运行如下两条命令:

    reimp -d libmysql.lib     //生成 libmysql.def文件
    dlltool -k -d libmysql.def -l libmysql.a    //生成 libmysql.a文件
    

      2. 编译驱动,工作目录为“C:QtSourcesqtbasesrcpluginssqldriversmysql”

      在“Qt 5.2.1 for Desktop (MinGW 4.8 32bit)”命令窗口中切换工作目录。然后依次执行下面2条命令:、

    qmake -o Makefile "INCLUDEPATH+=E:MySQLinclude" "LIBS+=E:MySQLliblibmysql.a" mysql.pro    //注意:里面的目录是上一步的工作目录
    mingw32-make
    

      有的人说需要在编译前将以下两行语句加到“C:QtSourcesqtbasesrcpluginssqldriversmysql”文件夹中的"mysql.pro"文件中,我没有加,但是也编译成功了。

    INCLUDEPATH += "E:/MySQL/include"
    LIBS += "E:/MySQL/lib/libmysql.lib"
    

      编译之后没有报错、没有大篇幅的error,那就说明编译成功了。(下面这是别人的截图,我的跟这个差不多)

      

    三)如果不幸编译失败

      很多时候,成功并不会一蹴而就。就像,你现在编译不成功一样。

      编译不成功有很多原因,如果你发现在编译的结果中出现了神马“Microsoft Visual Studio”之类的问题,那一定是在环境变量中将微软VS的库设置为环境变量了。删掉后重新编译。如果要重新编译,记得将之前编译的结果以及Makefile文件都删掉。

      做一件事情,坑爹的不是不知道如何去做,而是每一步都照着别人的做,最终却没有像别人一样成功。而自己不得不去面对各种错误,但是成长的过程就是你遇到问题、遇到挫折,然后将问题解决的过程。所以,如果你编译不成功,试着去找出到底哪里出问题了,直到编译成功为止。我从发现问题到解决问题,用了差不多18个小时。所以,耐心点。

    四)编译好的文件在哪里?

      参考中是说在Qt目录里,或者在“sqldrivers”目录里,这都是误导,我知道我编译成功了,但是我没找到文件,所以我就调用搜索文件的功能。最终,在“C:QtSourcesqtbasepluginssqldrivers”目录下找到了我要的文件:

      

      将这四个文件复制,粘贴到所谓的Qt主目录“C:QtQt5.2.15.2.1mingw48_32pluginssqldrivers”文件夹中。

      同时,将“E:MySQLlib”文件夹中的“libmysql.dll”文件拷贝到“C:QtQt5.2.15.2.1mingw48_32in”文件夹中。

    五)测试成果

      程序代码和输出结果如下:

      

    Have fun!!!

  • 相关阅读:
    微信小程序 'errcode' => 47003,'errmsg' => 'argument invalid! hint
    微信分账
    Acwing-----1016. 最大上升子序列和
    Acwing-----1012. 友好城市
    Acwing-----482. 合唱队形
    Acwing-----1014. 登山
    Acwing-----1017. 怪盗基德的滑翔翼
    Acwing-----275. 传纸条
    Acwing-----1027. 方格取数
    Acwing-----1018. 最低通行费
  • 原文地址:https://www.cnblogs.com/Joseph-AMI/p/3598759.html
Copyright © 2011-2022 走看看