Qt中Mac编译MySQL驱动
准备工作
- mysql安装包
- Qt安装时选择了Source
编译过程
- 下载并解压MySQL安装包。
- 修改mysql.pro文件(Qt/5.12.10/Src/qtbase/src/plugins/sqldrivers/mysql/mysql.pro)。
TARGET = qsqlmysql
HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp
#QMAKE_USE += mysql ## 这个位置注释掉
# 添加下面一个依赖与一个库
INCLUDEPATH+=/Users/rey/.sbin/mysql-8.0.26-macos11-x86_64/include
LIBS += -L//Users/rey/.sbin/mysql-8.0.26-macos11-x86_64/lib -lmysqlclient
OTHER_FILES += mysql.json
PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
在编译的过程中可能会报错提示找不到qtsqldrivers-config.pri;
直接将qsqldriverbase.pri复制一份名称为 qtsqldrivers-config.pri即可。
编译: qmake ./mysql.pro
添加驱动
make && make install
会自动添加驱动到编译器的sqldrivers目录中。
找到新编译的驱动,使用
otool -L libmysqlclient.dylib
检测一下依赖
正常会找不到库。@rpath/libmysqlclient.21.dylib
将mysql 安装包中的这个文件创建一个软连接放到 clang_x64/lib/目录即可。
sudo ln -s /mysql/lib/libmysqlclient.dylib xxxx/clang_64/lib/libmysqlclient.21.dylib
2022-3-6更新
最近安装Mac更新后,突然不能连接MySQL数据库了,提示QMysql drive not load
解决过程:
使用 otool -L libqsqlmysql.dylib
查询这个驱动的依赖是不是完整的,结果出现了个我不知道的 @rpath
查询结果 :
libqsqlmysql.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/libmysqlclient.21.dylib (compatibility version 21.0.0, current version 21.0.0)
@rpath/QtSql.framework/Versions/5/QtSql (compatibility version 5.15.0, current version 5.15.2)
@rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.15.0, current version 5.15.2)
/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)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 904.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.60.1)
这个 @rpath
是什么鬼?看来问题就出在这个地方了。于是乎,网上冲浪解决问题:install_name_tool -add_rpath xxxx/mysql-8.0.27/lib xxxx/libmysqlclient.21.dylib
第一个xxx
表示msyql中库所在的位置,第二个xxx
表示驱动所在的位置。问题解决。