Centos 7 中 QT出現QSqlDatabase: MYSQL driver not loaded

系統版本 : Centos7
QT VERSION : 5.6

測試代碼:

#include <iostream>
using namespace std;

#include <QApplication>
#include "gui/mainwindow.h"

#include <QSqlDatabase>
#include <QDebug>
#include <QSqlError>
#include <QSqlQuery>

using namespace std;

int main (int argc, char **argv) {
    //輸出可用數據庫
    QCoreApplication::addLibraryPath("/home/njq/dev_env/Qt5.6.0/5.6/gcc_64/plugins/sqldrivers");
    qDebug()<<"available drivers:";
    QStringList drivers = QSqlDatabase::drivers();
    foreach(QString driver, drivers)
        qDebug()<<driver;

    //打開MySQL
    QSqlDatabase data_base = QSqlDatabase::addDatabase("QMYSQL");
    data_base.setHostName("192.168.0.200");  //設置主機地址
    data_base.setPort(3306);  //設置端口
    data_base.setDatabaseName("alarmcenter");  //設置數據庫名稱
    data_base.setUserName("root");  //設置用戶名
    data_base.setPassword("root");  //設置密碼
    if(!data_base.open())
        qDebug()<<"failed to connect to mysql" << data_base.lastError ().text ();
    else {
        qDebug()<<"success";

        QString strSQL = "SELECT alarm_id FROM alarm;";
        QSqlQuery sql_query;
        sql_query.prepare (strSQL);
        sql_query.exec ();
        while (sql_query.next ()) {
            int id = sql_query.value (0).toInt ();
            qDebug () << id;
        }
    }
}

出現瞭如下的錯誤:

QSqlDatabase: MYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7
QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins
failed to connect to mysql "Driver not loaded Driver not loaded"

查看QT的安裝目錄

~/dev_env/Qt5.6.0/5.6/gcc_64/plugins/sqldrivers

有一個文件:

    libqsqlmysql.so

使用ldd命令檢查下依賴

[xxx@localhost sqldrivers]$ ldd libqsqlmysql.so 
    linux-vdso.so.1 =>  (0x00007ffcf65b4000)
    libmysqlclient_r.so.16 => not found
    libz.so.1 => /lib64/libz.so.1 (0x00007f452c898000)

看到 libmysqlclient_r.so.16 這個so文件的依賴沒有找到
通過查找資料,發現如下解決辦法

先安裝MYSQL的開發環境

[njq@localhost sqldrivers]$ sudo  yum install mysql-devel

重新編譯mysql驅動

[njq@localhost mysql]$ cd ~/dev_env/Qt5.6.0/5.6/Src/qtbase/src/plugins/sqldrivers/mysql
[xxx@localhost mysql]$ ~/dev_env/Qt5.6.0/5.6/gcc_64/bin/qmake  #因爲沒有配置qmake路徑,所以用了全路徑
[xxx@localhost mysql]$ make

看到編譯後的最後一行

mv -f libqsqlmysql.so ../../../../plugins/sqldrivers/

把這個生成的libqsqlmysql.so覆蓋到......./Qt5.6.0/5.6/gcc_64/plugins/sqldrivers

[xxx@localhost sqldrivers]$ mv libqsqlmysql.so  ~/dev_env/Qt5.6.0/5.6/gcc_64/plugins/sqldrivers/

然後再查看libqsqlmysql.so的依賴

[xxx@localhost sqldrivers]$ ldd libqsqlmysql.so 
    linux-vdso.so.1 =>  (0x00007fffc437c000)
    libmysqlclient.so.18 => /usr/lib64/mysql/libmysqlclient.so.18 (0x00007f3de67bc000)
    libz.so.1 => /lib64/libz.so.1 (0x00007f3de65a5000)
    libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f3de636e000)
    libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f3de6155000)
    libssl.so.10 => /lib64/libssl.so.10 (0x00007f3de5ee7000)
    libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007f3de5aff000)
    libQt5Sql.so.5 => not found
    libQt5Core.so.5 => not found
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f3de58e2000)
    libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f3de55da000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f3de52d7000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f3de50c1000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f3de4d00000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f3de4afb000)
    libfreebl3.so => /lib64/libfreebl3.so (0x00007f3de48f8000)
    libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007f3de46ac000)
    libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f3de43c6000)
    libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f3de41c2000)
    libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007f3de3f90000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f3de6ee3000)
    libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007f3de3d80000)
    libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f3de3b7c000)
    libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f3de3962000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f3de373c000)
    libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f3de34db000)
    liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f3de32b5000)

看到問題已經搞定

重新運行程序,看到如下結果

available drivers:
"QSQLITE"
"QMYSQL"
"QMYSQL3"
"QPSQL"
"QPSQL7"
success
171118
171119
171120
171121
171122
171123
171124
171125
171126
171127
171128
171129
171130
171131
171132
171133
171134
171135
171136

轉載路徑:https://www.cnblogs.com/drnijq/p/5923354.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章