簡體   English   中英

QSqlDatabase:未在 Ubuntu 15.04 64 位上加載 QMYSQL 驅動程序

[英]QSqlDatabase: QMYSQL driver not loaded on Ubuntu 15.04 64bits

在 Ubuntu 15.04 64 位中,我安裝了 Qt5.6(在線安裝程序),在嘗試將我的開發環境從 Windows 7 移動到 Linux 時,我遇到了以下問題:

SqlDatabase: QMYSQL driver not loaded

之后,我設法找到了~/Qt/5.6/gcc_64/plugins/sqldrivers/libqsqlmysql.so然后:

$ ldd libqsqlmysql.so
    linux-vdso.so.1 =>  (0x00007ffffd571000)
    libmysqlclient_r.so.16 => not found
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fe94ef24000)
    libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fe94ecec000)
    libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007fe94ead2000)
    libssl.so.10 => not found
    libcrypto.so.10 => not found
    libQt5Sql.so.5 => /home/user/Qt/5.6/gcc_64/plugins/sqldrivers/../../lib/libQt5Sql.so.5 (0x00007fe94e88d000)
    libQt5Core.so.5 => /home/user/Qt/5.6/gcc_64/plugins/sqldrivers/../../lib/libQt5Core.so.5 (0x00007fe94e17a000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe94df5c000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fe94dc4d000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe94d944000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fe94d72e000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe94d364000)
    libicui18n.so.56 => /home/user/Qt/5.6/gcc_64/plugins/sqldrivers/../../lib/libicui18n.so.56 (0x00007fe94cec9000)
    libicuuc.so.56 => /home/user/Qt/5.6/gcc_64/plugins/sqldrivers/../../lib/libicuuc.so.56 (0x00007fe94cb11000)
    libicudata.so.56 => /home/user/Qt/5.6/gcc_64/plugins/sqldrivers/../../lib/libicudata.so.56 (0x00007fe94b12e000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe94af29000)
    libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007fe94ad27000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fe94ab1f000)
    libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fe94a80f000)
    /lib64/ld-linux-x86-64.so.2 (0x000056024837f000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fe94a5a2000)

告訴libmysqlclient_r.so.16 => not found 事實上,我似乎有一個更新的版本:

find / -name libmysqlclient_r*
/usr/lib/x86_64-linux-gnu/libmysqlclient_r.so.18
/usr/lib/x86_64-linux-gnu/libmysqlclient_r.so.18.1.0
/usr/lib/x86_64-linux-gnu/libmysqlclient_r.so
/usr/lib/x86_64-linux-gnu/libmysqlclient_r.a

也許這就是問題所在。 有人能證實嗎? 我應該如何進行?

首先,再次檢查您是否安裝了包含libssl.solibcrypto.solibmysqlclient_r.so的包(看起來您安裝了最后一個,很可能您也安裝了前兩個,但請仔細檢查)。

然后,您的問題是這些共享對象具有不同的 SONAME,表明它們與 Qt 附帶的插件二進制不兼容,因此需要重新編譯。

所以:

  1. 安裝上面找到的軟件包的開發版本libssl-devmysql-client-dev或類似的)。

  2. 從您的 Qt 安裝運行MaintenanceTool ,並確保選擇安裝 Qt 的源代碼

  3. 進入QTDIR/5.6/Src/qtbase/src/plugins/sqldrivers/mysql/

  4. 運行正確的qmake ,即來自 Qt 安裝的那個(不是系統范圍的或類似的)。 確保提供完整路徑的最佳方法是: QTDIR/5.6/gcc_64/bin/qmake

  5. 運行make 希望這會奏效™; 如果它抱怨缺少一些庫,請安裝它們並重新運行make

  6. 現在應該已經生成了一個新的libqsqlmysql.so插件; 用這個新的覆蓋舊的。

此問題有兩個修復程序。 首先嘗試找到位於您的 qt 目錄中的 qtbase 文件夾,然后嘗試運行 ./configure -plugin-sql-mysql 如果它們丟失,它將激活驅動程序。

如果這不能解決您的問題,我建議您仔細檢查您的代碼並嘗試運行連接到 Sql 數據庫的 Qt 示例之一。 即修改連接到本地 SQLite 數據庫的示例代碼,將參數更改為 MySQL。 如果此示例未引發“驅動程序未加載錯誤”,請按照以下步驟操作。

確保您使用的是 QSqlDatabase 的靜態函數,而不是使用

QSqlDatabase *db = new QSqlDatabase(); 
db->addDatabase("QMYSQL");  

你應該做的

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

我的Qt5.11.1也有同樣的問題,我的操作系統是Ubuntu16.04 ,我通過從這里安裝libmysqlclient18解決了這個問題

https://launchpad.net/ubuntu/xenial/amd64/libmysqlclient18/5.6.25-0ubuntu1

下載后從下載目錄運行命令,

sudo dpkg -i libmysqlclient18_5.6.25-0ubuntu1_amd64.deb

我正在使用 Ubuntu 18.04.4 並使用系統的 Qt5 編譯我的項目。 我安裝libqt5sql5-mysql包后,驅動程序加載成功。

sudo apt-get install libqt5sql5-mysql

要在 Raspberry Pi 上使用 MySql 和 PyQt5,可以安裝:

sudo apt-get install libqt5sql5-mysql

sudo apt-get install libqt5sql5-mysql

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM