1. 程式人生 > >Qt與MySQL連線,drivers not loaded問題

Qt與MySQL連線,drivers not loaded問題

環境 : os : Ubuntu 16.04

             MySql : Ver 14.14 Distrib 5.7.18

             Qt : 5.8

在這個問題上折騰了兩天,走了有不少彎路,看了網上不少的解決方法,也有一些收穫分享下。

關於Qt連線MySQL出現drivers not loaded 的情形,我遇到的問題中有兩類,也導致了我對問題的誤判,浪費了時間。

qDebug << QSqlDatabase :: drivers();
QSqlDatabase db(QSqlDatabase::addDatabase("QMYSQL"));
qDebug << db.lastError;

以上三條語句可以基本輔助你完成對出現問題的診斷,當然本文僅限於 drivers not loaded(DNL)問題。

       我們以MySql為例子,首先參照一篇部落格:QMySQL driver not loaded的原理和解決辦法。這篇文章從Qt連線MySQL的原理過程分析,將問題定在幾個連結庫的問題上,包括 libmysql.so(在windows下為dll),qsqlmysqld.so,qsqlmysql.so。如果對連結這方面比較熟悉的話,就能明白是在這幾個過程中出現了中斷、缺失或者版本問題。我們一個個地來查詢。

       首先是Qt的sqldriver問題,一個重要的事情是,在Qt的安裝過程中,千萬不要省事只安裝一部分,將最新的Qt版本下的所有元件全部勾選並安裝,確認是否全部安裝的方法:開啟安裝路徑 Qt5.8/Qt5.8/gcc_64 看是否有一個Src資料夾,如果沒有最好選擇將Qt解除安裝並重裝。

      如果在編譯程式碼的輸出中,看到如下QSqlDatabase : availiable drivers : QSQLITE,xxx 但是沒有QMYSQL,那麼就可以判斷是缺少驅動檔案。檢視方法,開啟 Qt5.8.0/Qt5.8.0/gcc_64/plugins/sqldrivers看是否有libqsqlmysql.so檔案,如果沒有的話,嘗試檢查是否需要安裝以下lib

sudo apt-get install libqt4-dev
sudo apt-get install libqt4-sql-mysql
sudo apt-get install libqt4-sql
安裝完成後,如果可以找到libqsqlmysql.so檔案的話,說明驅動安裝成功,再次編譯你的程式碼,如果還有問題,考慮是否是MySQL驅動檔案的問題,這個時候就需要找MySQL目錄下的LIB或者INCLUDE問題。

如果你是預設安裝MySQL,在路徑 /usr/lib檔案加下找到MySQL資料夾,很多共享庫(.so)都在這裡,如果不在這裡的話,退到上級目錄,在/usr/lib/x86_64-linux-gnu資料夾中尋找libmysqlclient.so.xxx,如果不存在的話,說明我們需要安裝MySQL的庫檔案

sudo apt-get install libmysql-dev
安裝完成後,應該能在這個目錄下找到libmysqlclient.so.16(18)等檔案。

然後,繼續執行我們的程式碼

如果這時候qDebug出現以下資訊:QSqlDatabase : availiable drivers : QSQLITE, QMYSQL, QMYSQL3的樣式,恭喜你,第一步的驅動檔案問題已經解決了。如果這個時候可以連線上MySQL,那自然是萬事大吉。

不過很不幸,我的問題並沒有到此結束。

Qt5.8.0/Qt5.8.0/gcc_64/plugins/sqldrivers下檢視libqsqlmysql.so的依賴項。

 cd Qt5.8.0/Qt5.8.0/gcc_64/plugins/sqldrivers
 ldd libqsqlmysql.so
會出現該庫檔案所依賴的一些檔案的路徑和版本的資訊。

著重找一些如下格式的錯誤:

 libssl.so.10->not found
 libcrypto.so.10->not found
出現這些說明依賴的這些檔案缺失,像上面我舉的例子就可以首先查詢是否在/usr/lib/x86_64-linux-gnu中有libssl.so檔案,如果這個也沒有,安裝庫檔案
sudo apt-get install libssl-dev
並仍舊在這一個目錄下
sudo cp libssl.so libssl.so.10
將libssl.so拷貝一份,並將名字改為.10版本,即可填補not found的空缺。

再次執行程式碼,應該可以看到資料庫的連線成功。

可能用到的路徑:

/usr/lib/mysql  /usr/lib/x86_64-linux-gnu   mysql的庫檔案路徑

/Qt5.8.0/Qt5.8.0/gcc_64/plugins/drivers    Qt與MySQL連線驅動庫檔案路徑。

/Qt5.8.0/Qt5.8.0/Src/qtbase/src/sqldrivers   Qt與MySQL連線驅動檔案的原始碼。

解除安裝方法:進入安裝目錄

./MaintenanceTool

相關推薦

QtMySQL連線drivers not loaded問題

環境 : os : Ubuntu 16.04              MySql : Ver 14.14 Distrib 5.7.18              Qt : 5.8 在這個問題上折騰了兩天,走了有不少彎路,看了網上不少的解決方法,也有一些收穫分享下。 關

Java Mysql連線並分頁顯示

這是我第一個上規模的Java專案,我們必須在一週內完成的作業,零基礎學習Java,網上收集了很多資料,逐漸對面向物件的思想有所瞭解,但還是半灌水,後期打算結合專案系統地學習一遍Java。老師佈置的任務主要有四個:1、實現Java與mysql連線,並利用JTable分頁顯示資

qt連線mysql提示QMYSQL driver not loaded

1、下載 mysql-5.6.24-win32 2、在qt原始碼路徑Src\qtbase\src\plugins\sqldrivers\mysql中找到MySQL.pro工程檔案,新增外部庫,即第一步中libmysql.lib的目錄,編譯生成的檔案在src/qtbase/p

QTMYSQL連線

接上一篇所講,我們已經安裝好MYSQL5.6並且配置好了環境變數,這篇我將介紹如何通過QT使用MYSQL QT連線MYSQL 首先建立專案,在.pro檔案中新增程式碼 QT +=sql 例如:我加在了最後 程式碼 程式碼註釋夠詳細了,我就不過多贅述了,

MySQL高版本的情況下建立MySQL連線的時候提示需要進行SSL加密

警告信心如下: Fri Nov 16 19:19:23 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. Accordi

Qt5.4下連線Mysql,QSqlDatabase: QMYSQL driver not loaded but available

首先來自這位國外大神的幫助  http://seppemagiels.com/blog/create-mysql-driver-qt5-windows,  同時我最希望我的這篇部落格能夠幫助一些朋友解決這個問題,我也是糾結了好久,搞得好煩,非常能理解那種心情。。。。網上的

解決Ubuntu16.04上QT5.7開發QMYSQL資料庫 mysql drivers not loaded問題

Qmsql not loaded :平臺 qt5.7  Ubuntu16.04 [email protected]:~$ cd /home/no/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers [email protecte

PyQt5連線MYSQL時顯示Driver not loaded解決方案

在第一次用PyQt5的 QSqlDatabase.addDatabase 連線mysql的時候,可能會出現Driver not loaded的情況,如下: from PyQt5.QtSql import QSqlQuery, QSqlDatabase from

Linux下Qtmysql建立連線

授權許可的限制,Qt的開源版本無法提供所有的驅動程式.在mysql的官網上也沒找到提供給Qt的驅動,網上說的編譯方法貌似不適合現在的版本,研究了半天,終於找到一個方法. 系統環境:Kubuntu 11.10 sudo apt-get download libqt4-sql-mysql 把包解壓縮,

Qt連結資料庫出現“QMYSQL driver not loaded”的解決辦法

VS2012+QT5.2.1+MySQL 5.1.51 Win32資料庫編寫程式執行: void QtUser::getData(void){ QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");    db.setH

JavaMySQL連線的工具類JDBCUTils

幾種JDBCUtils 第一種 public class JDBCUtils { public static String driver; public static String url; public static String user;

qtjs互動並在百度地圖上繪製軌跡

前言: 獲得了照片的GPS資訊後,我們現在要做的就是把GPS資訊傳入JS中,然後通過百度地圖API將軌跡繪製出來。 一:在程式頁面載入地圖 qt5.6及之後取消了QWebkits,轉為使用QWebEngine. 在qt5.6的額ui設計師介面中,並不能直

jsp通過jdbc驅動mysql連線

資料庫的連線終於成功了。主要運用mysql-gui-tools-5.0-r17-win32這個工具,其實主要就是一個mysql-connector-java-5.0.4-bin.jar而已,這個可以單獨下載。 把mysql-connector-java-5.0.4-b

Unity使用Socket後臺連線包含Json的讀寫

在做遊戲開發,最近正在將前端與後臺連線,就寫一下筆記記錄一下吧! 我用的是Socket與後臺進行連線,資料的傳輸用的是Json格式。也是從零做起的,以前沒有與伺服器連線的經驗,所以也是結合了網上一些資料。首先說一下總體思路吧,這裡沒有用非同步,採用的是新建了執行緒,來接

Mac下Ruby開發時Library not loaded: libmysqlclient.18.dylib解決方法

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib/usr/lib/libmysqlclient.18.dylib      或 export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_

修改freeradiusmysql連線時的最大連線

         現在用freeradius+mysql來實現PPPoE的驗證,有時會發生一臺樓宇交換機掉電的情況,這時會一下子有上百個下線和上線的記錄(掉電後立即又有電了),這時可能freeradius可能就會招架不住了。因為預設與mysql連線的socket是256個,s

利用Spark sql操作Hdfs資料Mysql資料sql視窗函式的使用

需求說明:                                                                  對熱門商品進行統計        根據商品的點選資料,統計出各個區域的銷量排行TOPK 產品        輸入:開始時間與結束時間 

QtMySQL互動出現亂碼

The gibberish of interaction Qt and mysql 定位問題 出現亂碼問題,首先確保Qt和mysql兩邊編碼方式一樣,全部改為UTF-8. 這裡檢視mysql端編碼的方式。至於如何修改mysql字符集,請看“MyS

關於kettle mysql 連線後 出現錯誤的問題

近日在用kettle 連線MySQL的時候 總是在連結成功之後  出現各種出現問題,不是看不到資料庫中的表 就是提示sql語句報錯 (這個錯誤是在我沒有寫任何sql 語句的情況下爆出的錯誤)或者直接就連不上資料庫   總之各種問題 然後就是在各種網站找答案加群去問問題  最

oraclemysql連線原理整理筆記

oracle和mysql連線方式對比一、oracle的客戶端連線方式:oracle net 用於客戶端和伺服器之間的會話連線,並負責維護該會話 net在客戶端是一個後臺應用程序,在伺服器端則包含監聽器的活動程序 (這也就是為什麼客戶端需要安裝基礎的oracl