您的位置:首页 > 编程语言 > Qt开发

【已解决】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.再次连接数据库成功!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐