在Ubuntu 15.04 64位中,我安装了Qt5.6(在线安装程序),在尝试将我的开发环境从Windows 7迁移到Linux时,我遇到了以下问题:
SqlDatabase: QMYSQL driver not loaded
关注this后,我找到了~/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
也许这就是问题所在。有人可以证实吗?我该怎么办?
答案 0 :(得分:4)
首先,请仔细检查您是否安装了包含libssl.so
,libcrypto.so
和libmysqlclient_r.so
的软件包(看起来您拥有最后一个软件包,它极有可能是您也有前两个,但只是仔细检查)。
然后,您的问题是您拥有不同SONAME的共享对象,并表示他们的二进制文件与Qt附带的插件不兼容,因此需要重新编译。
因此:
安装上面找到的软件包的开发版(libssl-dev
,mysql-client-dev
或类似内容。
从您的Qt安装中运行MaintenanceTool
,并确保选择安装Qt的源代码。
进入QTDIR/5.6/Src/qtbase/src/plugins/sqldrivers/mysql/
。
运行右 qmake
,即来自Qt安装的那个(不是系统范围的或类似的)。最好的方法是提供完整的路径:QTDIR/5.6/gcc_64/bin/qmake
。
运行make
。希望这只会有效;如果它抱怨某些遗失的库,请安装它们并重新运行make
。
现在应该已经生成了一个新的libqsqlmysql.so
插件;用这个新的覆盖旧的。
答案 1 :(得分:1)
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
答案 2 :(得分:1)
我正在使用Ubuntu 18.04.4,并使用系统的Qt5编译我的项目。安装libqt5sql5-mysql
软件包后,驱动程序已成功加载。
sudo apt-get install libqt5sql5-mysql
答案 3 :(得分:0)
此问题有两个修复方法。首先尝试找到位于qt目录中的qtbase文件夹,然后尝试运行./configure -plugin-sql-mysql,如果它们丢失,将激活驱动程序。
如果这不能解决您的问题,我建议您仔细检查您的代码并尝试运行一个与Sql数据库建立连接的Qt示例。即修改连接到本地SQLite数据库的示例代码,将参数更改为MySQL。如果此示例未引发“Driver not loaded error”,请按照以下步骤操作。
确保您使用的是QSqlDatabase的静态功能,而不是使用
QSqlDatabase *db = new QSqlDatabase();
db->addDatabase("QMYSQL");
你应该做的
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
答案 4 :(得分:0)
在树莓派上使用 MySql 和 PyQt5,安装没问题:
sudo apt-get install libqt5sql5-mysql
和
sudo apt-get install libqt5sql5-mysql