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:\Qt\Qt5.2.1\5.2.1\mingw48_32),主目录中只有一个mingw48_32文件夹。并不是什么“qt\plugins\...”,也没有“.../src/plugins/...”。所以,根据参考,我去Qt官方网站下载了Qt5.2的源码包“qt-everywhere-opensource-src-5.2.1.zip”。解压后放在了“C:\Qt”文件夹下,并重命名为"Sources"。如下图:
在"Sources"文件夹中找到了接下来要工作的目录:“C:\Qt\Sources\qtbase\src\plugins\sqldrivers\mysql”。里面有需要的lib文件和pro文件。
2. 安装MySQL(我的是5.6版本,原先安装在“C:\Program Files”下,但是考虑到参考中提到的“文件夹命名不能有空格”,于是重新安装在“C:\MySQL”中)。我安装的是“FULL”,完整安装,所以,安装目录“C:\MySQL\MySQL Server 5.6\bin”还是避免不了空格。于是,仿照参考中的指示,重新新建文件夹“E:\MySQL”,将“C:\MySQL\MySQL Server 5.6\bin”中的“include”和“lib”文件夹拷贝到里面。可是我的“lib”文件夹里并没有“opt”子文件夹。但是,有"libmysql.dll",那就足够了不是么?
3. 下载动态库格式转换工具,网址为: http://www.qtcn.org/download/mingw-utils-0.3.tar.gz,解压后把里边bin目录里的remip.exe拷到“C:\Qt\Qt5.2.1\5.2.1\mingw48_32\bin”目录里。同时,为了保险起见,我还特地下载安装了“MinGW”,并且将刚刚的remip.exe文件也复制了一份放在了“C:\MinGW\bin”文件夹中。
二) 开整
1. 通过“E:\MySQL\lib\libmysql.lib”生成libmysql.a文件
打开Qt自带的命令行程序(我用的是win8.1,所以在Qt的菜单目录里能找到,不管是什么系统,这个“Qt 5.2.1 for Desktop (MinGW 4.8 32bit)”程序都应该能在Qt Creator的菜单图标周围找得到。)在命令行窗口中切换到工作目录“E:\MySQL\lib”:
运行如下两条命令:
reimp -d libmysql.lib //生成 libmysql.def文件
dlltool -k -d libmysql.def -l libmysql.a //生成 libmysql.a文件
2. 编译驱动,工作目录为“C:\Qt\Sources\qtbase\src\plugins\sqldrivers\mysql”
在“Qt 5.2.1 for Desktop (MinGW 4.8 32bit)”命令窗口中切换工作目录。然后依次执行下面2条命令:、
qmake -o Makefile "INCLUDEPATH+=E:\MySQL\include" "LIBS+=E:\MySQL\lib\libmysql.a" mysql.pro //注意:里面的目录是上一步的工作目录
mingw32-make
有的人说需要在编译前将以下两行语句加到“C:\Qt\Sources\qtbase\src\plugins\sqldrivers\mysql”文件夹中的"mysql.pro"文件中,我没有加,但是也编译成功了。
INCLUDEPATH += "E:/MySQL/include"
LIBS += "E:/MySQL/lib/libmysql.lib"
编译之后没有报错、没有大篇幅的error,那就说明编译成功了。(下面这是别人的截图,我的跟这个差不多)
三)如果不幸编译失败
很多时候,成功并不会一蹴而就。就像,你现在编译不成功一样。
编译不成功有很多原因,如果你发现在编译的结果中出现了神马“Microsoft Visual Studio”之类的问题,那一定是在环境变量中将微软VS的库设置为环境变量了。删掉后重新编译。如果要重新编译,记得将之前编译的结果以及Makefile文件都删掉。
做一件事情,坑爹的不是不知道如何去做,而是每一步都照着别人的做,最终却没有像别人一样成功。而自己不得不去面对各种错误,但是成长的过程就是你遇到问题、遇到挫折,然后将问题解决的过程。所以,如果你编译不成功,试着去找出到底哪里出问题了,直到编译成功为止。我从发现问题到解决问题,用了差不多18个小时。所以,耐心点。
四)编译好的文件在哪里?
参考中是说在Qt目录里,或者在“sqldrivers”目录里,这都是误导,我知道我编译成功了,但是我没找到文件,所以我就调用搜索文件的功能。最终,在“C:\Qt\Sources\qtbase\plugins\sqldrivers”目录下找到了我要的文件:
将这四个文件复制,粘贴到所谓的Qt主目录“C:\Qt\Qt5.2.1\5.2.1\mingw48_32\plugins\sqldrivers”文件夹中。
同时,将“E:\MySQL\lib”文件夹中的“libmysql.dll”文件拷贝到“C:\Qt\Qt5.2.1\5.2.1\mingw48_32\bin”文件夹中。
五)测试成果
程序代码和输出结果如下:
Have fun!!!
Qt 5.2中编译加载MySQL数据库驱动问题的总结的更多相关文章
- 分享知识-快乐自己:Maven 无法加载 Oracle 数据库驱动源
由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 手动添加到本地仓库需要本地有 ...
- sqoop加载mysql数据库
./bin/sqoop list-databases --connect jdbc:mysql://node-001:3306/ --username root --password hadoop
- 加载MySQL、Oracle、SQL Server 2000、SQL Server 2005及以上版本 的加载数据库驱动程序
2018-11-04 20:00:59 开始 //getConnection(String url, String user, String password) //url:连接数据库的URL 3 ...
- 在java程序中使用JDBC连接mysql数据库
在java程序中我们时常会用到数据库中的数据或操作数据库中的数据,如果java程序没有和我们得数据库连接,就不能实现在java程序中直接操作数据库.使用jdbc就能将java程序和数据库连起来,此时我 ...
- cocos2dx lua中异步加载网络图片,可用于显示微信头像
最近在做一个棋牌项目,脚本语言用的lua,登录需要使用微信登录,用户头像用微信账户的头像,微信接口返回的头像是一个url,那么遇到的一个问题就是如何在lua中异步加载这个头像,先在引擎源码里找了下可能 ...
- Ubuntu16.04下的modules模块编译加载
一.首先编写对应的驱动程序的相关内容:(最简单的hello.c程序) #include<linux/init.h> #include<linux/module.h> MODUL ...
- Qt之编译MySQL数据库驱动(MSVC)
Qt之编译MySQL数据库驱动(MSVC) (2013-12-13 20:24:46) 转载▼ 标签: qt mysql qmysql qt编译mysql qt之msvc编译mysql 分类: Qt ...
- iOS 解决LaunchScreen中图片加载黑屏问题
iOS 解决LaunchScreen中图片加载黑屏问题 原文: http://blog.csdn.net/chengkaizone/article/details/50478045 iOS 解决Lau ...
- 出现了内部错误-网站中X509Certificate2加载证书时出错
今天给网站配置了加密证书文件,用类X509Certificate2加载证书文件时,一直报出现了内部错误,但是Demo中用控制台程序加载证书没任何问题 读取证书文件的语句: X509Certificat ...
随机推荐
- 聊聊推荐系统,FM模型效果好在哪里?
本文始发于公众号:Coder梁 大家好,我们今天继续来聊聊推荐系统. 在上一回当中我们讨论了LR模型对于推荐系统的应用,以及它为什么适合推荐系统,并且对它的优点以及缺点进行了分析.最后我们得出了结论, ...
- 利用 Bean Validation 来简化接口请求参数校验
团队新来了个校招实习生静静,相互交流后发现竟然是我母校同实验室的小学妹,小学妹很热情地认下了我这个失散多年的大湿哥,后来... 小学妹:大湿哥,咱们项目里的 Controller 怎么都看不到参数校验 ...
- NOIP模拟测试26「嚎叫响彻在贪婪的机房·主仆见证了 Hobo 的离别·征途堆积出友情的永恒」
题目比较神仙,注意是题目神仙 贪婪暗示贪心,堆积暗示堆优化$\%\%\%\%\%\%\%$ 两个乱搞$+$一个堆优化$dp$ 嚎叫响彻在贪婪的机房 题解 对于一个序列来说只要他们差的$gcd$不为$1 ...
- 『无为则无心』Python基础 — 11、Python中的数据类型转换
目录 1.为什么要进行数据类型转换 2.数据类型转换本质 3.数据类型转换用到的函数 4.常用数据类型转换的函数 (1)int()函数 (2)float()函数 (3)str()函数 (4)bool( ...
- mysql的主从复制延迟问题--看这一篇就够了
在之前我们已经讲解了一主一从,双主双从的mysql集群搭建,在单机应用的时候看起来没有问题,但是在企业的生产环境中,在很多情况下都会有复制延迟的问题. 主从复制的原理我们在此处就不再赘述了,之 ...
- .Net Core 3.1简单搭建微服务
学如逆水行舟,不进则退!最近发现微服务真的是大势所趋,停留在公司所用框架里已经严重满足不了未来的项目需要了,所以抽空了解了一下微服务,并进行了代码落地. 虽然项目简单,但过程中确实也学到了不少东西. ...
- CosId 1.1.0 发布,通用、灵活、高性能的分布式 ID 生成器
CosId 通用.灵活.高性能的分布式 ID 生成器 介绍 CosId 旨在提供通用.灵活.高性能的分布式系统 ID 生成器. 目前提供了俩大类 ID 生成器:SnowflakeId (单机 TPS ...
- EXCEL根据某一列单元格特定标点符号分行,其它列内容一致
注意事项:此方法注意运用excel空值单元格填充,因此数据处理之前,如果存在值为空的,请特殊处理,后期处理完再替换为原来的空值 1.在决定分行数的列后插入一列 2.根据逗号之前值最多的数量来决定分行数 ...
- C++ 11 关键字
1.auto 我现在用auto,基本是在变量定义时根据初始化表达式自动推断该变量的类型. 另外与关键字 decltype 连用,在声明或定义函数时作为函数返回值的占位符. auto不能用来声明函数的返 ...
- 6. QT国际化 translate QT语言家 翻译
main. QTranslator *qtTranslator = new QTranslator(); if (IsChinese()) { qtTranslator->load(" ...