Qt5.7不能加载MySql驱动问题.(需要重新编译驱动)
转自:http://blog.csdn.net/qq_28851503/article/details/52422302
首先贴上我遇到的问题,如下:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7
Unable to open database
在解决这个问题的时候,首先在网上查询了各种解决方案,都尝试过,但是其中遇到的一些小问题,总是找不到解决方法,最终在"Stack Overflow"上提问得到了答案,故此记录一下,一遍以后备用,也希望能帮助到一些人.
环境: ubantu16.04 + Qt5.7 + MySql5.7
分析
安装方法:(该链接里面同时也包含卸载方法)
2. 进入驱动所在目录:
cd /ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers
3. ls 查看目录里面的文件:
cc@1whispers:~/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers$ ls
libqsqlite.so libqsqlmysql.so libqsqlpsql.so
4. 执行命令查看 libqsqlmysql.so 的依赖:
ldd libqsqlmysql.so
显示如下:
- linux-vdso.so.1 => (0x00007ffcb64e2000)
- libmysqlclient_r.so.16 => not found
- libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fea06463000)
- libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fea0622a000)
- libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007fea06011000)
- libssl.so.10 => /usr/lib/x86_64-linux-gnu/libssl.so.10 (0x00007fea05dba000)
- libQt5Sql.so.5 => /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libQt5Sql.so.5 (0x00007fea05b74000)
- libQt5Core.so.5 => /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libQt5Core.so.5 (0x00007fea05459000)
- libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fea0523c000)
- libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fea04eb9000)
- libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fea04bb0000)
- libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fea0499a000)
- libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fea045d0000)
- libnss3.so => /usr/lib/x86_64-linux-gnu/libnss3.so (0x00007fea0428a000)
- libnssutil3.so => /usr/lib/x86_64-linux-gnu/libnssutil3.so (0x00007fea0405d000)
- libplc4.so => /usr/lib/x86_64-linux-gnu/libplc4.so (0x00007fea03e57000)
- libnspr4.so => /usr/lib/x86_64-linux-gnu/libnspr4.so (0x00007fea03c18000)
- libicui18n.so.56 => /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libicui18n.so.56 (0x00007fea0377d000)
- libicuuc.so.56 => /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libicuuc.so.56 (0x00007fea033c5000)
- libicudata.so.56 => /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libicudata.so.56 (0x00007fea019e2000)
- libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fea017dd000)
- libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007fea015db000)
- librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fea013d3000)
- libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fea010c2000)
- /lib64/ld-linux-x86-64.so.2 (0x0000560757219000)
- libplds4.so => /usr/lib/x86_64-linux-gnu/libplds4.so (0x00007fea00ebd000)
- libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fea00c4d000)
在此会发现一个问题: libmysqlclient_r.so.16
=> not found,说明没有这个依赖项,所以现在我们要解决的是这个依赖.
5.查看自己所有的 libmysqlclient.so
cc@1whispers:~$ locate libmysqlclient.so
/home/cc/Desktop/libmysqlclient.so.20
/usr/lib/x86_64-Linux-gnu/libmysqlclient.so
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20.3.0
可知到我们的依赖有这些.
编译MySql驱动
1.首先要确定自己在安装Qt的时候安装了源码,如果没有安装源码,则需要重装Qt,切记装的时候记得选上源码那一项.
2.进入到源码中MySQL驱动的源码中
cd /ProgramFiles/Qt5.7.0/5.7/Src/qtbase/src/plugins/sqldrivers/mysql
路径是各自安装qt的路径而来.
3. 执行编译:
qmake->make->make install
执行过程:
sudo /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/bin/qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/mysql -lmysqlclient_r" mysql.pro
sudo make
sudo make install
在查看依赖 ldd libqsqlmysql.so ,则会看到已有依赖库.
再去运行程序,则会显示成功连接数据库.
Database connection established
这是记得要sudo make clean清理一下之前编译的中间文件.
可能出现的问题
1.执行qmake的时候: qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/mysql -lmysqlclient_r" mysql.pro这样的命令是用的默认的qmake文件,这样如果没有Qt4的SDK,则会出错,所以需要用我们自己安装Qt时路劲下的qmake.
sudo /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/bin/qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/mysql -lmysqlclient_r" mysql.pro
需要加上sudo,不然会出现 not permit的错误,即没有权限,所以需要用root权限.
2.在执行make的时候,也需要用到root权限.不然会出现以下错误:
注: 我本人就是死在这里,因为没有用root权限,但是出现错误又不懂什么原因,迷茫了2天,终于解决.
home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/bin/moc -DQT_NO_MTDEV -DQT_NO_LIBUDEV -DQT_NO_TSLIB -DQT_NO_LIBINPUT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG
-DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -I/home/cc/ProgramFiles/Qt5.7.0/5.7/Src/qtbase/mkspecs/linux-g++ -I/home/cc/ProgramFiles/Qt5.7.0/5.7/Src/qtbase/src/plugins/sqldrivers/mysql -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include/QtSql/5.7.0 -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include/QtSql/5.7.0/QtSql
-I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include/QtCore/5.7.0 -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include/QtCore/5.7.0/QtCore -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include/QtSql -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include/QtCore
-I/usr/include/c++/5 -I/usr/include/x86_64-linux-gnu/c++/5 -I/usr/include/c++/5/backward -I/usr/lib/gcc/x86_64-linux-gnu/5/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed -I/usr/include/x86_64-linux-gnu
-I/usr/include main.cpp -o .moc/main.moc
moc: Cannot create .moc/main.moc
Makefile:652: recipe for target '.moc/main.moc' failed
make: *** [.moc/main.moc] Error 1
3. 使用证确方式(sudo make)执行后肯能会出现以下问题:
- -lQt5Sql -lQt5Core -lpthread
- /usr/bin/ld: cannot find -lmysqlclient_r
- collect2: error: ld returned 1 exit status
- Makefile:114: recipe for target '../../../../plugins/sqldrivers/libqsqlmysql.so' failed
- make: *** [../../../../plugins/sqldrivers/libqsqlmysql.so] Error 1
可知,我们没有了lmysqlclient_r相关的文件:即没有libmysqlclient_r.so等文件;但是在之前分析的时候,知道我们有
/home/cc/Desktop/libmysqlclient.so.20/usr/lib/x86_64-linux-gnu/libmysqlclient.so/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20.3.0
所以要去链接出lmysqlclient_r相关的文件;
<code style="margin: 0px; padding: 0px; border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: inherit;"><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">cd </span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">/</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">usr</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">/</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">lib</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">/</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">x86_64</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">-</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">linux</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">-</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">gnu</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">/</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">
ln </span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">-</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">s libmysqlclient</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">so</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="lit" style="color: rgb(125, 39, 39); margin: 0px; padding: 0px; border: 0px;">20.3</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px;"><span style="color: rgb(125, 39, 39);">0</span></span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;"> libmysqlclient_r</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">so</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="lit" style="color: rgb(125, 39, 39); margin: 0px; padding: 0px; border: 0px;">20.3</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px;"><span style="color: rgb(125, 39, 39);">0</span></span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">
ln </span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">-</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">s libmysqlclient</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">so</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="lit" style="color: rgb(125, 39, 39); margin: 0px; padding: 0px; border: 0px;">20</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;"> libmysqlclient_r</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">so</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="lit" style="color: rgb(125, 39, 39); margin: 0px; padding: 0px; border: 0px;">20</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">
ln </span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">-</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">s libmysqlclient</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">so libmysqlclient_r</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">so</span></code>
这样在去执行sudo make命令,则会成功.
----------------------------------------------------------------------------------------------------------------------
注:
大家在用这个篇文章的时候若不能解决问题,也希望能在评论中给出,我们一起讨论解决.
转载请注明出处!
----------------------------------------------------------------------------------------------------------------------
Qt5.7不能加载MySql驱动问题.(需要重新编译驱动)的更多相关文章
- 加载MySQL、Oracle、SQL Server 2000、SQL Server 2005及以上版本 的加载数据库驱动程序
2018-11-04 20:00:59 开始 //getConnection(String url, String user, String password) //url:连接数据库的URL 3 ...
- Qt 5.2中编译加载MySQL数据库驱动问题的总结
背景: 本科毕业设计涉及图形界面与数据库查询.选择使用Qt实现图形界面编程,使用MySQL构建数据库.之前安装了Qt 5.2,后来又安装了MySQL Server 5.6 (FULL完全安装).接着就 ...
- spark1.4加载mysql数据 创建Dataframe及join操作连接方法问题
首先我们使用新的API方法连接mysql加载数据 创建DF import org.apache.spark.sql.DataFrame import org.apache.spark.{SparkCo ...
- 2015年传智播客JavaEE 第168期就业班视频教程16-框架结构测试(加载全spring配置文件)+struts2属性驱动测试
模块的规范化我们已经做完了,下面我们要做我们的功能了. 如果是模型驱动就是name="对应model的name" 如果用属性驱动的话,必须得把表现层(Action类)里面映射的用于 ...
- PHP无法加载MySQL模块
在 将PHP根目录下libmysql.dll复制到c:\Windows\system32中 在Apache目录中的conf\httpd.conf 中加载libmysql.dll ...
- android加固系列—6.仿爱加密等第三方加固平台之动态加载dex防止apk被反编译
[版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5402599.html ] 此方案的目的是隐藏源码防止直接性的反编译查看源码,原理是加密编译好的 ...
- idea使用大全(加载mysql驱动)
1.载入mysql驱动 找到项目结构(project structure) 选Modules 找到右边的加号选择第一个 OK
- sqoop加载mysql数据库
./bin/sqoop list-databases --connect jdbc:mysql://node-001:3306/ --username root --password hadoop
- Java SE之 Eclipse错误: 找不到或无法加载主类或项目无法编译10种解决大法!【摘抄】
声明一下:此BUG确实经常困扰我许久,今日遇到很强大的一套解决办法,又怕原博主的网页以后查找不到,故此摘抄copy一份,望得各方侵权一事而谅解. 传送门先行送上:http://blog.csdn.ne ...
随机推荐
- 从TCP协议的原理来谈谈rst复位攻击
在谈RST攻击前,必须先了解TCP:如何通过三次握手建立TCP连接.四次握手如何把全双工的连接关闭掉.滑动窗体是怎么数据传输的.TCP的flag标志位里RST在哪些情况下出现.以下我会画一些尽量简化的 ...
- Mina、Netty、Twisted一起学(七):公布/订阅(Publish/Subscribe)
消息传递有非常多种方式.请求/响应(Request/Reply)是最经常使用的.在前面的博文的样例中.非常多都是採用请求/响应的方式.当server接收到消息后,会马上write回写一条消息到clie ...
- js动态函数
最近项目中使用百度模板引擎baiduTemplate.js,使用动态函数解析模板中代码. 通过new Function([arg1,arg2,...,argN,]functionBody)方式实现动态 ...
- 重置浏览器的默认样式(css reset)
(1)定义:首先css reset指的是重置浏览器的默认样式 (2)作用:因为现在的浏览器很多,并且每个浏览器都有自己的默认样式,这样就会导致一个页面在多个浏览器下展示产生差异,所以我们需要做一些处理 ...
- 代码运行时间 检测锁及死锁详细信息,及sql语句 平台转化
代码运行时间 System.Diagnostics.Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); // 开始监视代码运行时间 ...
- [Android5 系列—] 1. 构建一个简单的用户界面
前言 安卓应用的用户界面是构建在View 和ViewGroup 这两个物件的层级之上的. View 就是一般的UI组件.像button,输入框等. viewGroup 是一些不可见的view的容器,用 ...
- iOS 获取图片某一点的颜色对象(UIColor*)。
- (UIColor *)colorAtPixel:(CGPoint)point { // Cancel if point is outside image coordinates if (!CGRe ...
- PE添加Style
1. <style id="NumberStyle"> <setting> <param name="option"> ...
- 01 json方式封装通信接口
新建一个json_api.php<?php class Response{ /** *按json方式输出通信 *@param integet $code 状态码 *@param string $ ...
- EasyRTMP实现Demux解析MP4文件进行rtmp推送实现RTMP直播功能
本文转自EasyDarwin团队Kim的博客:http://blog.csdn.net/jinlong0603/article/details/52965101 前面已经介绍过EasyRTMP,这里不 ...