在Ubuntu 15.04 64位中,我安装了Qt5.6(在线安装程序),并且在尝试将开发环境从Windows 7迁移到Linux时,遇到了以下问题:
SqlDatabase: QMYSQL driver not loaded
在此之后,我设法找到 ~/Qt/5.6/gcc_64/plugins/sqldrivers/libqsqlmysql.so然后:
~/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。实际上,似乎我有一个更新的版本:
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.so,很可能您也拥有前两个软件包,但要仔细检查)。libcrypto.so``libmysqlclient_r.so
libssl.so
libcrypto.so``libmysqlclient_r.so
然后,您的问题是,这些共享库具有不同的SONAME,请指出它们与Qt随附的插件二进制不兼容,因此需要重新编译。
因此:
安装 开发版本 以上(找到了包libssl-dev,mysql-client-dev或类似)。
libssl-dev
mysql-client-dev
MaintenanceTool从您的Qt安装中运行,并确保也选择安装Qt的 源代码 。
MaintenanceTool
进去QTDIR/5.6/Src/qtbase/src/plugins/sqldrivers/mysql/。
QTDIR/5.6/Src/qtbase/src/plugins/sqldrivers/mysql/
运行 正确的 qmake,即来自Qt安装的那个(不是系统范围的一个或类似的)。最好的确定方法是提供完整的路径:QTDIR/5.6/gcc_64/bin/qmake。
qmake
QTDIR/5.6/gcc_64/bin/qmake
运行make。希望这会起作用™; 如果它抱怨某些缺少的库,请安装它们并重新运行make。
make
现在应该已经产生了一个新libqsqlmysql.so插件。用这个新的覆盖旧的。
libqsqlmysql.so