【已解决】Qt 5.7.0 on Ubuntu, MySQL数据库报错 (driver not loaded)
2017-03-31 15:36
323 查看
Qt5.7连接Mysql数据库:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("imgdb");
db.setPort(3306);
db.setUserName("root");
db.setPassword("123456");
bool ok = db.open();
if(!ok){
qDebug()<<"Unable to open database";
}else{
qDebug()<<"Database connection established";
QSqlQuery myquery("select * from imgdb",db);
while(myquery.next())
{
QString imgClass = myquery.value(0).toString().trimmed();
qDebug()<<imgClass;
}
}
db.close();
在编译程序时,发现无法加载QMYSQL驱动。
出现如下的出错信息:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7
Unable to open database
问题分析:
在/home/nielsen/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/文件夹下
ldd libqsqlmysql.so
发现libmysqlclient_r.so.16 => not found 说明库文件依耐未能正确完成,可能安装Qt之后更新了MySql
解决方法:
https://download.qt.io/official_releases/qt/5.7/5.7.0/submodules/ 下载
qtbase-opensource-src-5.7.0.tar.gz
下载后解压文件
tar -xzvf qtbase-opensource-src-5.7.0.tar.gz
按照官方document(http://doc.qt.io/qt-5.8/sql-driver.html#qmysql) 先qmake 再 make 会报错
这是由于直接安装的不是源码编译的,所以会遇到main.cpp:42:30:fatal error: qsqldriverplugin.h: No such file directory
源码编译出libmysqlclient_r.so.16方法 见 http://www.cnblogs.com/yongqiang/p/6121515.html
网上简单的方法(亲测不行,会提示版本匹配不上):
sudo apt-get install libqt5sql5-mysql (Qt4.8.3版本的使用sudo apt-get install libqt4-sql5-mysql )
最后在usr/lib/x86_64-linux-gnu/qt5/plugins/sqldrivers/文件夹下找到了libqsqlmysql.so (Qt4.8.3版本在对应的qt4文件夹中)
直接复制回/home/nielsen/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/文件夹下替换
再次在该文件夹下 ldd libqsqlmysql.so
发现libmysqlclient_r.so.16 => /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18(0x00007fb9381ad000)
但是连接的数据库还是会提示Connot mix incompatible Qt library(version 0x50401) with this library(version 0x50700)
由于插件版本不同,google无果后,最后还是转向于源码编译解决。
源码编译遇到的问题1:权限不足
moc: Cannot create .moc/main.moc
Makefile:652: recipe for target '.moc/main.moc' failed
make: *** [.moc/main.moc] Error 1
解决方法:使用sudo make
可参考:http://blog.csdn.net/qq_28851503/article/details/52422302
源码编译遇到的问题2:缺少对应的库
/usr/bin/ld: cannot find -lssl 缺
/usr/bin/ld: cannot find -lcrypto
解决方法:
先都寻相对应的LIB在进行安装:
1.apt-cache search libssl-dev
sudo apt-get install libssl-dev
2.apt-cache search libcrypto++-dev
sudo apt-get install libcrypto++-dev
3.再次sudo make,编译成功
4.生成的libqsqlmysql.so 存放在/home/nielsen/Qt5.7.0/5.7/Src/qtbase/plugins/sqldrivers/文件夹下(make完后最后一行有写)
5.复制libqsqlmysql.so文件到/home/nielsen/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/中
6.再次连接数据库成功!
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("imgdb");
db.setPort(3306);
db.setUserName("root");
db.setPassword("123456");
bool ok = db.open();
if(!ok){
qDebug()<<"Unable to open database";
}else{
qDebug()<<"Database connection established";
QSqlQuery myquery("select * from imgdb",db);
while(myquery.next())
{
QString imgClass = myquery.value(0).toString().trimmed();
qDebug()<<imgClass;
}
}
db.close();
在编译程序时,发现无法加载QMYSQL驱动。
出现如下的出错信息:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7
Unable to open database
问题分析:
在/home/nielsen/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/文件夹下
ldd libqsqlmysql.so
发现libmysqlclient_r.so.16 => not found 说明库文件依耐未能正确完成,可能安装Qt之后更新了MySql
解决方法:
https://download.qt.io/official_releases/qt/5.7/5.7.0/submodules/ 下载
qtbase-opensource-src-5.7.0.tar.gz
下载后解压文件
tar -xzvf qtbase-opensource-src-5.7.0.tar.gz
按照官方document(http://doc.qt.io/qt-5.8/sql-driver.html#qmysql) 先qmake 再 make 会报错
这是由于直接安装的不是源码编译的,所以会遇到main.cpp:42:30:fatal error: qsqldriverplugin.h: No such file directory
源码编译出libmysqlclient_r.so.16方法 见 http://www.cnblogs.com/yongqiang/p/6121515.html
网上简单的方法(亲测不行,会提示版本匹配不上):
sudo apt-get install libqt5sql5-mysql (Qt4.8.3版本的使用sudo apt-get install libqt4-sql5-mysql )
最后在usr/lib/x86_64-linux-gnu/qt5/plugins/sqldrivers/文件夹下找到了libqsqlmysql.so (Qt4.8.3版本在对应的qt4文件夹中)
直接复制回/home/nielsen/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/文件夹下替换
再次在该文件夹下 ldd libqsqlmysql.so
发现libmysqlclient_r.so.16 => /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18(0x00007fb9381ad000)
但是连接的数据库还是会提示Connot mix incompatible Qt library(version 0x50401) with this library(version 0x50700)
由于插件版本不同,google无果后,最后还是转向于源码编译解决。
源码编译遇到的问题1:权限不足
moc: Cannot create .moc/main.moc
Makefile:652: recipe for target '.moc/main.moc' failed
make: *** [.moc/main.moc] Error 1
解决方法:使用sudo make
可参考:http://blog.csdn.net/qq_28851503/article/details/52422302
源码编译遇到的问题2:缺少对应的库
/usr/bin/ld: cannot find -lssl 缺
/usr/bin/ld: cannot find -lcrypto
解决方法:
先都寻相对应的LIB在进行安装:
1.apt-cache search libssl-dev
sudo apt-get install libssl-dev
2.apt-cache search libcrypto++-dev
sudo apt-get install libcrypto++-dev
3.再次sudo make,编译成功
4.生成的libqsqlmysql.so 存放在/home/nielsen/Qt5.7.0/5.7/Src/qtbase/plugins/sqldrivers/文件夹下(make完后最后一行有写)
5.复制libqsqlmysql.so文件到/home/nielsen/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/中
6.再次连接数据库成功!
相关文章推荐
- ubuntu上 QT 连接各种数据库报错解决(QSqlDatabase: * driver not loaded )
- Qt 5.1.0 on Ubuntu Linux, MySQL数据库报错 (driver not loaded)
- ubuntu上 QT 连接各种数据库报错解决(QSqlDatabase: * driver not loaded )
- ubuntu下 QT 连接各种数据库报错解决(QSqlDatabase: * driver not loaded )
- ubuntu下QT连接各种数据库报错解决(QSqlDatabase: * driver not loaded)
- Qt中编译mysql驱动程序及解决 driver not loaded 错误
- QT连接mysql数据库报错——QSqlDatabase: QMYSQL driver not loaded
- fedora 18~20 中Qt 5.2.1 解决连接mysql数据库出现QMYSQL driver not loaded的问题
- Windows下Qt连接Mysql数据库的方法,解决QSqlDatabase: QMYSQL driver not loaded 问题
- Ubuntu16.04 QT "QMYSQL driver not loaded on Ubuntu"问题
- windows系统下解决Qt连接MySQL数据库时出现的问题:QMYSQL driver not loaded
- Qt5.7.0在ubuntu无法输入中文解决方法
- CentOS7 (64位) 下QT5.5 连接MySQL数据库(driver not loaded)
- fedora 18~20 中Qt 5.2.1 解决连接mysql数据库出现QMYSQL driver not loaded的问题
- 编译Qt的mysql驱动及解决 driver not loaded 错误
- QT-MYSQL连接问题( Driver not loaded)
- 解决ubuntu中mysql数据库表名不能为中文,以及插入中文乱码问题
- qt-mysql driver conflits with Webkit on compilation
- 连接SQL Server2000报错[Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket解决方法
- Ubuntu 升级错误信息:mount: mounting none on /dev failed: no such device的解决办法