1. 程式人生 > >Qt5.7不能載入MySql驅動問題.(需要重新編譯驅動)

Qt5.7不能載入MySql驅動問題.(需要重新編譯驅動)

轉自:http://blog.csdn.net/qq_28851503/article/details/52422302

首先貼上我遇到的問題,如下:

QSqlDatabase: QMYSQL driver not loaded

QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7

Unable to open database

在解決這個問題的時候,首先在網上查詢了各種解決方案,都嘗試過,但是其中遇到的一些小問題,總是找不到解決方法,最終在"Stack Overflow"上提問得到了答案,故此記錄一下,一遍以後備用,也希望能幫助到一些人.

環境:   ubantu16.04 + Qt5.7 + MySql5.7

分析

1.首先確定自己是否安好裝了MySql(沒有安裝則先安裝)
安裝方法:(該連結裡面同時也包含解除安裝方法) 其次執行以下命令,看是否已安裝以下選項: sudo apt-get install libmysqlclient-dev

2. 進入驅動所在目錄:

cd  /ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers

3. ls 檢視目錄裡面的檔案: 

[email protected]:~/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers$ ls
libqsqlite.so  libqsqlmysql.so  libqsqlpsql.so

4. 執行命令檢視 libqsqlmysql.so 的依賴:

ldd libqsqlmysql.so 

顯示如下:

[plain] view plain copy  print?
  1. linux-vdso.so.1 =>  (0x00007ffcb64e2000)  
  2. libmysqlclient_r.so.16 => not found  
  3. libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fea06463000)  
  4. libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fea0622a000)  
  5. libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007fea06011000)  
  6. libssl.so.10 => /usr/lib/x86_64-linux-gnu/libssl.so.10 (0x00007fea05dba000)  
  7. libQt5Sql.so.5 => /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libQt5Sql.so.5 (0x00007fea05b74000)  
  8. libQt5Core.so.5 => /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libQt5Core.so.5 (0x00007fea05459000)  
  9. libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fea0523c000)  
  10. libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fea04eb9000)  
  11. libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fea04bb0000)  
  12. libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fea0499a000)  
  13. libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fea045d0000)  
  14. libnss3.so => /usr/lib/x86_64-linux-gnu/libnss3.so (0x00007fea0428a000)  
  15. libnssutil3.so => /usr/lib/x86_64-linux-gnu/libnssutil3.so (0x00007fea0405d000)  
  16. libplc4.so => /usr/lib/x86_64-linux-gnu/libplc4.so (0x00007fea03e57000)  
  17. libnspr4.so => /usr/lib/x86_64-linux-gnu/libnspr4.so (0x00007fea03c18000)  
  18. libicui18n.so.56 => /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libicui18n.so.56 (0x00007fea0377d000)  
  19. libicuuc.so.56 => /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libicuuc.so.56 (0x00007fea033c5000)  
  20. libicudata.so.56 => /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libicudata.so.56 (0x00007fea019e2000)  
  21. libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fea017dd000)  
  22. libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007fea015db000)  
  23. librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fea013d3000)  
  24. libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fea010c2000)  
  25. /lib64/ld-linux-x86-64.so.2 (0x0000560757219000)  
  26. libplds4.so => /usr/lib/x86_64-linux-gnu/libplds4.so (0x00007fea00ebd000)  
  27. libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fea00c4d000)  
在此會發現一個問題: libmysqlclient_r.so.16 => not found,說明沒有這個依賴項,所以現在我們要解決的是這個依賴.

5.檢視自己所有的 libmysqlclient.so

[email protected]:~$ locate libmysqlclient.so

/home/cc/Desktop/libmysqlclient.so.20
/usr/lib/x86_64-Linux-gnu/libmysqlclient.so
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20.3.0

可知到我們的依賴有這些.

編譯MySql驅動

注:通常這種情況最好應該先看看官網文件

1.首先要確定自己在安裝Qt的時候安裝了原始碼,如果沒有安裝原始碼,則需要重灌Qt,切記裝的時候記得選上原始碼那一項.

2.進入到原始碼中MySQL驅動的原始碼中

cd /ProgramFiles/Qt5.7.0/5.7/Src/qtbase/src/plugins/sqldrivers/mysql

路徑是各自安裝qt的路徑而來.

3. 執行編譯:

qmake->make->make install

執行過程:

sudo /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/bin/qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/mysql -lmysqlclient_r" mysql.pro

sudo make

sudo make install

在檢視依賴 ldd libqsqlmysql.so ,則會看到已有依賴庫.

再去執行程式,則會顯示成功連線資料庫.

Database connection established

這是記得要sudo make clean清理一下之前編譯的中間檔案.

可能出現的問題

1.執行qmake的時候: qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/mysql -lmysqlclient_r" mysql.pro這樣的命令是用的預設的qmake檔案,這樣如果沒有Qt4的SDK,則會出錯,所以需要用我們自己安裝Qt時路勁下的qmake.

sudo /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/bin/qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/mysql -lmysqlclient_r" mysql.pro

需要加上sudo,不然會出現 not permit的錯誤,即沒有許可權,所以需要用root許可權.

2.在執行make的時候,也需要用到root許可權.不然會出現以下錯誤:

注: 我本人就是死在這裡,因為沒有用root許可權,但是出現錯誤又不懂什麼原因,迷茫了2天,終於解決.

home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/bin/moc -DQT_NO_MTDEV -DQT_NO_LIBUDEV -DQT_NO_TSLIB -DQT_NO_LIBINPUT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -I/home/cc/ProgramFiles/Qt5.7.0/5.7/Src/qtbase/mkspecs/linux-g++ -I/home/cc/ProgramFiles/Qt5.7.0/5.7/Src/qtbase/src/plugins/sqldrivers/mysql -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include/QtSql/5.7.0 -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include/QtSql/5.7.0/QtSql -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include/QtCore/5.7.0 -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include/QtCore/5.7.0/QtCore -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include/QtSql -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include/QtCore -I/usr/include/c++/5 -I/usr/include/x86_64-linux-gnu/c++/5 -I/usr/include/c++/5/backward -I/usr/lib/gcc/x86_64-linux-gnu/5/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include main.cpp -o .moc/main.moc
moc: Cannot create .moc/main.moc
Makefile:652: recipe for target '.moc/main.moc' failed

make: *** [.moc/main.moc] Error 1

3. 使用證確方式(sudo make)執行後肯能會出現以下問題: [plain] view plain copy  print?
  1. -lQt5Sql -lQt5Core -lpthread    
  2. /usr/bin/ld: cannot find -lmysqlclient_r  
  3. collect2: error: ld returned 1 exit status  
  4. Makefile:114: recipe for target '../../../../plugins/sqldrivers/libqsqlmysql.so' failed  
  5. make: *** [../../../../plugins/sqldrivers/libqsqlmysql.so] Error 1  
可知,我們沒有了lmysqlclient_r相關的檔案:即沒有libmysqlclient_r.so等檔案;但是在之前分析的時候,知道我們有

/home/cc/Desktop/libmysqlclient.so.20/usr/lib/x86_64-linux-gnu/libmysqlclient.so/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20.3.0

所以要去連結出lmysqlclient_r相關的檔案;

<code style="margin: 0px; padding: 0px; border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: inherit;"><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">cd </span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">/</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">usr</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">/</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">lib</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">/</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">x86_64</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">-</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">linux</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">-</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">gnu</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">/</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">
ln </span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">-</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">s libmysqlclient</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">so</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="lit" style="color: rgb(125, 39, 39); margin: 0px; padding: 0px; border: 0px;">20.3</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px;"><span style="color: rgb(125, 39, 39);">0</span></span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;"> libmysqlclient_r</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">so</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="lit" style="color: rgb(125, 39, 39); margin: 0px; padding: 0px; border: 0px;">20.3</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px;"><span style="color: rgb(125, 39, 39);">0</span></span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">
ln </span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">-</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">s libmysqlclient</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">so</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="lit" style="color: rgb(125, 39, 39); margin: 0px; padding: 0px; border: 0px;">20</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;"> libmysqlclient_r</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">so</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="lit" style="color: rgb(125, 39, 39); margin: 0px; padding: 0px; border: 0px;">20</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">
ln </span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">-</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">s libmysqlclient</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">so libmysqlclient_r</span><span class="pun" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">.</span><span class="pln" style="color: rgb(48, 51, 54); margin: 0px; padding: 0px; border: 0px;">so</span></code>

這樣在去執行sudo make命令,則會成功.

----------------------------------------------------------------------------------------------------------------------

注:

大家在用這個篇文章的時候若不能解決問題,也希望能在評論中給出,我們一起討論解決.

轉載請註明出處!

----------------------------------------------------------------------------------------------------------------------


相關推薦

Qt5.7不能載入MySql驅動問題.(需要重新編譯驅動)

轉自:http://blog.csdn.net/qq_28851503/article/details/52422302 首先貼上我遇到的問題,如下: QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: ava

LINUX下PHP編譯添加相應的動態擴展模塊so(不需要重新編譯PHP,以openssl.so為例)

down get 階段 很多 習慣 lin 模塊 臨時 操作 本文轉自:原文鏈接 http://www.cnblogs.com/doseoer/p/4367536.html 網上我看到有很多相關的文章都是簡述這個問題的,但畢竟因為LINUX版本眾多,很多LIUNX命令或路

chromium 21 chromium新增新的IPC訊息需要重新編譯

00 IPC訊息簡介 參考: http://blog.gclxry.com/chromium-inter-process-communication/ 01 程序間通訊IPC訊息 chromium 瀏覽器程序(主程序)和渲染程序(子程序)之間通訊,一般使用IPC訊息。這些訊息

VS2013+QT5.7每次執行時都會重新Moc'ing 檔案的解決辦法

之前的編寫的一個程式明明是編譯通過了,但是點選【執行除錯】的時候,任然會出現以下資訊: 1> Moc'ing QtGuiUserManage.h... 1> moc_QtGuiUserManage.cpp 只要是執行就會出現這樣的問題,每

Qt5.7中使用MySQL Driver(需要把libmysql.dll檔案拷貝到Qt的bin目錄中。或者自己編譯的時候,連結靜態庫)

1、使用環境 Qt5.7的安裝安裝就已經帶了MySQL Driver,只需要在安裝的時候選擇一下即可。 如果沒有安裝,可以採取自己編譯的方式。 在Qt的原始碼包的qtbase\src\sql\drivers\mysql路徑下,就是相關的原始碼檔案。 這裡就不說編譯方式了。只

vs2015 Qt5.6 環境搭建以及mysql5.7靜態編譯驅動

在vs2015中建立Qt工程,並且設定Qt Vs Tools->Qt Options: 在Qt Options中Add自己編譯的Qt靜態庫路徑(如C:\qt\static-vs2015-qt): 滑鼠右鍵->專案->Qt proj

Qt5.7.1 樹莓派3B+ 2016-09-23-raspbian-jessie.img 交叉編譯 ubuntu16.04

官方教程: https://wiki.qt.io/RaspberryPi2EGLFS 中文提示: http://blog.csdn.net/a_power/article/details/52809728 需要用到的工具列表: tools工具: https://gi

Scientific Linux 7.6 釋出,重新編譯的 RHEL

   Scientific Linux 7.6 已釋出,Scientific Linux 是重新編譯的 Red Hat Enterprise Linux ,由費米國家加速器實驗室和歐洲核研究組織(CERN)共同開發。它旨在與 RHEL 完全相容,同時提供了上游產品中未

windows下QT5.7.1如何編譯MQTT客戶端

本文主要講述在windows平臺下QT5.7.1如何編譯MQTT客戶端,讓大家避免我走過的一些彎路。具體MQTT的使用後續會進行更新。 一. 下載原始碼 一般需要在github或者其它地方下載MQTT客戶端的原始碼,一般都可以下到,這裡附上鍊接: https://github.co

gradle編譯指令碼需要重新下載gradle問題

2015-05-22 執行gradle指令碼時,總是需要下載gradle,但我已經安裝好了,並配置了環境。 [email protected] % ./gradlew run Downloading https://

重新編譯ClassLoader記錄被載入的類

1.新建java專案,建包java.lang,新建類ClassLoader(將src.zip中的ClassLoader.java中的內容copy過來),修改loadClass(String name)方法: public Class<?> l

vs2015靜態編譯Qt5.7.1及使用

2.下載並安裝Python; 3.下載並安裝Perl; 注意:① 安裝Python,Perl 時要注意勾選新增環境變數到系統。            ② 檢測三個環境是否安裝好,開啟cmd視窗

Qt for Linux:在CentOS下編譯Qt5.7

概述 本文將講述如何在CentOS的系統下,編譯Qt5.7 系統 我使用的是阿里雲的RCS主機,1G記憶體,1M頻寬,40G硬碟,CentOS 7系統,64位。 這個配置拿來跑伺服器足夠了(

linux 核心編譯驅動模組ko的配置以及載入模組解除安裝模組例項測試

linux 核心編譯驅動模組ko的配置以及載入模組、解除安裝模組例項測試一、要讓linux系統支援動態載入驅動模組必須先對linux 核心進行相關的配置,不然編譯不過,載入模組也會載入失敗甚至導致裝置重啟。1、勾選核心Enable loadable module suppor

VS2013 + QT5.7.0靜態編譯(千呼萬喚始出來)

轉載請註明原文連結! 為了解決的問題:QT動態編譯得到的exe可執行檔案,只能在本機執行。若直接複製到一臺未安裝QT的計算機上,肯定是無法執行的。 解決方法一:請參照我的另一篇部落格QT程式 如何在未安裝QT的電腦上執行,該方法仍然採用動態編譯的方式,只是採用QT提供的

QT5.7.0交叉編譯與移植遇到的問題以及解決辦法

花一個周的時間,終於總結了一篇這樣的文章。都是坑呀,在這裡放出來,給那些找不到解決辦法的人一點提示。如果有不足的地方,請指正。謝謝。前提:開發板是大升電氣的SBC-IMX6UL。QT5.7.0 交叉編譯遇見的問題及解決方法1.    問題1:在configure的過程中遇到的

VS2013 + QT5.7.0靜態編譯(使用MT、MTd模式)

本文假設您已成功安裝 qt-opensource-windows-x86-msvc2013_64-5.7.0.exe 和 qt-vs-addin-1.25.exe(均可以在官網下載到) 【步驟1】在計算機上安裝python庫和perl庫(因為後續的靜態編譯

解決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

openwrt 驅動模組的編譯載入

1、要編譯一個適用於openwrt系統的nids驅動, 原始碼由硬體商提供。 首先在ubuntun 下 make 編譯一下, 檢視是否編譯正常,是否出現錯誤, 修改錯誤。 OpenWrt環境下的編譯 1、 進入openwrt的編譯目錄,即

Qt5.7.1-mingw530_32與opencv在win7 64位下編譯環境的搭建

版本 Qt版本:qt-opensource-windows-x86-mingw530-5.7.1 opencv版本:opencv-3.2.0-vc14 系統:win7 64位 CMake:cmake-3.8.0-rc2-win64-x64 由於原