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

來源:互聯網
上載者:User

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 loadedQSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7QSqlDatabase: an instance of QCoreApplication is required for loading driver pluginsfailed 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 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"success171118171119171120171121171122171123171124171125171126171127171128171129171130171131171132171133171134171135171136

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.