【已解决】Qt 5.7.0 on Ubuntu, MySQL数据库报错 (driver not loaded)

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()<         }
    }
    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.再次连接数据库成功!







你可能感兴趣的:(Qt)