macOS下qt5连接mysql5.7驱动问题

5 篇文章 0 订阅

引言

macOS+Qt5.9+MySQL5.7.17连接数据库报错如下:

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins

解决

方法1. 重新编译libqsqlmysql.dylib

查看QtAssisitant,章节How to Build the QMYSQL Plugin on Unix and macOS中提到:

cd $QTDIR/qtbase/src/plugins/sqldrivers/mysql
qmake "INCLUDEPATH+=/usr/local/include" "LIBS+=-L/usr/local/lib -lmysqlclient_r" mysql.pro
make

具体到我的路径如下:

$ cd ~/Qt/5.9/Src/qtbase/src/plugins/sqldrivers/mysql
$ qmake "INCLUDEPATH+=/usr/local/mysql/include" "LIBS+=-L/usr/local/mysql/lib -lmysqlclient_r" mysql.pro
$ make

但是执行make时报错如下,网上有同样问题,最后brew install qt5 --with-mysql重装Qt和MySQL才解决

ld: library not found for -lmysqlclient_r
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [../../../../plugins/sqldrivers/libqsqlmysql.dylib] Error 1
make: *** [release-all] Error 2

方法2.重新链接libmysqlclient库的路径

发现在Qt文件中sqldriver目录下libqsqlmysql.dylib默认指向Mysql文件的位置不对。

$ cd ~/Qt/5.9/clang_64/plugins/sqldrivers
$ otool -L libqsqlmysql.dylib
libqsqlmysql.dylib:
    libqsqlmysql.dylib (compatibility version 0.0.0, current version 0.0.0)
    @rpath/QtSql.framework/Versions/5/QtSql (compatibility version 5.9.0, current version 5.9.0)
    @rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.9.0, current version 5.9.0)
    /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
    /opt/local/lib/mysql55/mysql/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)#这一行
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)

查看我的MySQL实际路径为/usr/local/mysql/lib/libmysqlclient.20.dylib
于是将Qt默认指向位置和正确的指向位置之间建立一个软连接,将它们连接起来。

在默认指向的位置建好相应的文件夹

$ sudo mkdir -p /opt/local/lib/mysql55/mysql/

建立软连接

$ sudo ln -s /usr/local/mysql/lib/libmysqlclient.20.dylib /opt/local/lib/mysql55/mysql/libmysqlclient.18.dylib

解决问题!

Tips

1.添加环境变量后才能用qmake

vim ~/.bash_profile

export PATH=$PATH:/Users/millet/Qt/5.9/clang_64/bin

2.Qt操作MySQL数据库前要先创建数据库

QT只能连接mysql里面已有的数据库,然后才能创建数据库表等。
创建mysql数据库需要在mysql里面操作,或者用mysql的可视化工具操作,
或者先不执行db.setDatabaseName("mydata");,仅连接open数据库,然后利用 QSqlQuery查询语句create database mydata;去创建数据库,使用数据库。

3.谨慎使用brew install qt5 --with-mysql

我个人使用 brew install qt5 --with-mysql重装Qt和MySQL,安装持续了108min,期间电脑风扇狂转。

4.配置中添加Qt版本

若qmake路径是无法直接访问的隐藏路径,可用command+shift+G然后输入路径跳转

参考

Mac下Qt连接MySQL 驱动问题
在mac下使用qt5连接mysql5.7
Mac下Qt连接MySql数据库

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值