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

xiaoxiao2021-02-28  203

引言解决 方法1 重新编译libqsqlmysqldylib方法2重新链接libmysqlclient库的路径 Tips 添加环境变量后才能用qmakeQt操作MySQL数据库前要先创建数据库谨慎使用brew install qt5 --with-mysql配置中添加Qt版本 参考

引言

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数据库

转载请注明原文地址: https://www.6miu.com/read-62736.html

最新回复(0)