KcF*_*nMi 2 c++ linux ubuntu qt qt5.6
在 Ubuntu 15.04 64 位中,我安装了 Qt5.6(在线安装程序),在尝试将我的开发环境从 Windows 7 移动到 Linux 时,我遇到了以下问题:
SqlDatabase: QMYSQL driver not loaded
Run Code Online (Sandbox Code Playgroud)
在此之后,我设法找到 ~/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)
Run Code Online (Sandbox Code Playgroud)
告诉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
Run Code Online (Sandbox Code Playgroud)
也许这就是问题所在。有人能证实吗?我应该如何进行?
首先也是最重要的,仔细检查你是否有包含libssl.so,libcrypto.so和libmysqlclient_r.so安装的包(看起来你有最后一个,很可能你也有前两个,但只需仔细检查)。
然后,您的问题是这些共享对象具有不同的 SONAME,表明它们与 Qt 附带的插件二进制不兼容,因此需要重新编译。
所以:
安装开发版本以上(找到了包libssl-dev,mysql-client-dev或类似)。
MaintenanceTool从您的 Qt 安装运行,并确保选择安装 Qt 的源代码。
进去QTDIR/5.6/Src/qtbase/src/plugins/sqldrivers/mysql/。
运行正确的 qmake,即来自 Qt 安装的那个(不是系统范围的或类似的)。最好的确定方法是提供它的完整路径:QTDIR/5.6/gcc_64/bin/qmake.
运行make。希望这会奏效™;如果它抱怨一些缺少的库,请安装它们并重新运行make.
现在应该已经生成了一个新libqsqlmysql.so插件;用这个新的覆盖旧的。