当Qt数据库应用找不到MySql
来源:互联网 发布:nginx 默认错误页面 编辑:程序博客网 时间:2024/05/22 15:32
以linux环境为例,两种报错情况:
1、载入MySql驱动失败,并在可选数据库驱动中,没有MySql选项
2、载入MySql驱动失败,并在可选数据库驱动中,有MySql选项
针对第一种情况,请检查:
1)mysql数据库已完整安装,可搜索到客户端库文件,如
[luhaitao@localhost ~]$ locate mysqlclient
/usr/lib64/mysql/libmysqlclient.so.18
/usr/lib64/mysql/libmysqlclient.so.18.0.0
2)qt用来使用mysql的插件库已正确安装,这个如果是从官网下载的完整安装包,一般会安装好,如qt-opensource-linux-x64-5.6.1-1.run安装完,在如下类似路径可看到so库
[luhaitao@localhost ~]$ ls /opt/Qt5.6.1/5.6/gcc_64/plugins/sqldrivers/
libqsqlite.so libqsqlmysql.so libqsqlpsql.so
3)如果是链接时报错,请检查工程设置,在这不详细说明
针对第二种情况,比较奇怪,一般摸不着头脑,我自己的环境出现了这样的问题,查找到最后,原因如下,以做参考:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7
1)数据库操作,大部分框架都支持ODBC封装,以便屏蔽底层差异。qt的插件就是为了屏蔽数据库差异,用来封装各厂商的原始客户端连接组件,以达到对上统一的操作接口。所以,一般一个厂商对应一个插件。
2)如果,插件库和厂商客户端组件都安装了,qt也能检测到,但还是报驱动未载入,那很可能的原因就是加载库文件失败了,具体可用ldd命令查看插件库是否依赖完整,如下
[root@localhost ~]# ldd /opt/Qt5.6.1/5.6/gcc_64/plugins/sqldrivers/libqsqlmysql.so
linux-vdso.so.1 (0x00007fff6ebfb000)
libmysqlclient_r.so.16 => not found
libz.so.1 => /lib64/libz.so.1 (0x00007f465f5fd000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f465f3c7000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f465f1ae000)
libssl.so.10 => /lib64/libssl.so.10 (0x00007f465ef3b000)
libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007f465eadb000)
libQt5Sql.so.5 => /opt/Qt5.6.1/5.6/gcc_64/plugins/sqldrivers/../../lib/libQt5Sql.so.5 (0x00007f465e897000)
libQt5Core.so.5 => /opt/Qt5.6.1/5.6/gcc_64/plugins/sqldrivers/../../lib/libQt5Core.so.5 (0x00007f465e182000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f465df64000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f465dbe2000)
libm.so.6 => /lib64/libm.so.6 (0x00007f465d8df000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f465d6c8000)
libc.so.6 => /lib64/libc.so.6 (0x00007f465d307000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007f465d103000)
libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007f465ceb5000)
libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f465cbcd000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f465c9c8000)
libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007f465c796000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f465c592000)
libicui18n.so.56 => /opt/Qt5.6.1/5.6/gcc_64/plugins/sqldrivers/../../lib/libicui18n.so.56 (0x00007f465c0f7000)
libicuuc.so.56 => /opt/Qt5.6.1/5.6/gcc_64/plugins/sqldrivers/../../lib/libicuuc.so.56 (0x00007f465bd3f000)
libicudata.so.56 => /opt/Qt5.6.1/5.6/gcc_64/plugins/sqldrivers/../../lib/libicudata.so.56 (0x00007f465a35c000)
libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0 (0x00007f465a159000)
librt.so.1 => /lib64/librt.so.1 (0x00007f4659f51000)
libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007f4659c18000)
/lib64/ld-linux-x86-64.so.2 (0x000055bed186b000)
libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007f4659a08000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f4659804000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f46595e9000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f46593c5000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f4659152000)
从上可以看出,库libmysqlclient_r.so.16找不到,这个库是什么库呢,其实就是mysql客户端组件,我们已经安装了,但是因为版本不一致,而qt又使用的带版本号的版本编译的,导致链接失败。
这种情况,我们可以新建一个适配qt的软链接,使其能找到mysql客户端组件,如下
[root@localhost ~]# ls -lh /usr/lib64/libmysqlclient_r.so.16
lrwxrwxrwx. 1 root root 41 9月 18 23:57 /usr/lib64/libmysqlclient_r.so.16 -> /usr/lib64/mysql/libmysqlclient.so.18.0.0
[root@localhost ~]#
这个时候,再启动应用,数据库驱动就OK了
0 0
- 当Qt数据库应用找不到MySql
- qt sqlite找不到数据库问题
- Mysql数据库异常:找不到数据库
- Qt应用MySQL小结
- 关于eclipse下web应用连接mysql数据库出现找不到驱动包的问题
- qt连接mysql数据库
- Qt 连接MySQL数据库
- qt链接mysql数据库
- Qt连接MySql数据库
- Qt Mysql数据库总结
- Qt 连接MYSQL数据库
- QT链接数据库MySql
- Qt连接MySQL数据库
- QT---连接mysql数据库
- QT访问Mysql数据库
- Qt 连接MySQL数据库
- QT连接MYSQL数据库
- Qt连接MySQL数据库
- Scrapy爬取美女图片第四集 突破反爬虫(上)
- 二叉树的先序,中序,后序遍历
- 64位Ubuntu kylin 16.04显示CPU内存使用率
- 漫步线性代数二十四——行列式应用
- leetcode 61. Rotate List
- 当Qt数据库应用找不到MySql
- 自定义EditText
- unity 编写代码日常(一)
- 奇虎360_2017校园招聘笔试编程题第二题
- SEO优化第一步
- 享元模式(Flyweight)
- 2013计算机视觉代码合集(一、二)
- 浅谈对java集合的理解
- 安卓四大组件之Service