最开始是使用Qt Creator的mysql驱动,结果和qmake的版本不一致,出错
Cannot mix incompatible Qt library (version 0x50c01) with this library (version 0x50c02)
解决版本:下载qt源代码(最好是下载的就包括Sources,里面就是源代码)
然后自己编译mysql源代码,首先尝试过打开mysql文件夹里的pro,路径是:/Users/macbookpro/Qt5.14.1/5.14.1/Src/qtbase/src/plugins/sqldrivers/mysql
,在里面添加
INCLUDEPATH += "/usr/local/mysql-8.0.19-macos10.15-x86_64/include"
LIBS += -L/usr/local/mysql-8.0.19-macos10.15-x86_64/lib -llibmysqlclient.21
DESTDIR = "/Users/macbookpro/Qt5.14.1/5.14.1/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers"
但是由于文件权限原因:
error: Cannot write file /mkspecs/modules-inst/qt_plugin_qsqlmysql.pri: Cannot create parent directory
在看了Qt论坛的解决办法后,把qbase文件夹移动到下载里面,也就是:/Users/macbookpro/Downloads/work/qtbase
里面。
其实可以直接在文件夹里(我的路径是:/Users/macbookpro/Qt5.14.1/5.14.1/Src/qtbase/src/plugins/sqldrivers/mysql
)使用qmake编译:
如果遇到
解决办法:使用文本编译器打开.pro文件,然后把QMAKE_USE += mysql
注释了,也就是#QMAKE_USE += mysql
,然后再次编译问题解决。
编译代码如下(其中make:编译,make install:安装
【make是用来编译的,它从Makefile中读取指令,然后编译。make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。】):
最后终于成功了,编译后的文件路径:/usr/local/Cellar/qt/5.14.1/plugins/sqldrivers/libqsqlmysql.dylib
铛铛铛,编译文件成功。
不容易呀!!
弄了三天才编译好。widnows都有现成的lib和dll库,但是mac就是不行。。。
编译好了,但是使用连接动态库的时候,却遇到了问题:
在项目里添加环境变量QT_DEBUG_PLUGINS,值为1,也就是蓝色部分【目的是为了打印插件信息】,如下:
再次运行程序:
#include
#include
#include
#include
int main(int argc, char** argv){
QApplication a(argc, argv);
qDebug()<<"drives: ";
QStringList drivers = QSqlDatabase::drivers(); //获取现在可用的数据库驱动
foreach(QString driver, drivers)
qDebug() << driver;
QSqlDatabase database = QSqlDatabase::addDatabase("QMYSQL");
return a.exec();
}
显示插件详细信息:
也就是mysql的dylib动态库加载失败,
下面进入动态库的位置:
➜ ~ cd /usr/local/Cellar/qt/5.14.1/plugins/sqldrivers
➜ sqldrivers ls
libqsqlite.dylib libqsqlmysql.dylib libqsqlodbc.dylib libqsqlpsql.dylib
然后运行:
otool -L libqsqlmysql.dylib
打印动态库的连接信息,显示结果为:
通过仔细观察,发现@rpath/libmysqlclient.21.dylib (compatibility version 21.0.0, current version 21.0.0)
这个路径根本不存在,于是,运行:install_name_tool -change @rpath/libmysqlclient.21.dylib /usr/local/mysql-8.0.19-macos10.15-x86_64/lib/libmysqlclient.21.dylib libqsqlmysql.dylib
,作用是更改dylib库中连接地址,把连接地址@rpath/libmysqlclient.21.dylib (compatibility version 21.0.0, current version 21.0.0)
改为/usr/local/mysql-8.0.19-macos10.15-x86_64/lib/libmysqlclient.21.dylib
。
然后再次运行otool -L libqsqlmysql.dylib
,显示:
这说明连接成功。
最后再次运行程序,
说明连接成功。哈哈mac连接mysql驱动,再次终于圆满结束。
widows和mac的mysql驱动地址:
链接:https://pan.baidu.com/s/1PLbwIKIC4mn77AYbh6e3Ew 密码:4293
连接mac上mysql环境的代码:
//连接xampp
QSqlDatabase database = QSqlDatabase::addDatabase("QMYSQL");
database.setHostName("192.168.64.2");//127.0.0.1
database.setPort(3306);
database.setUserName("root");
database.setPassword("");
database.setDatabaseName("majiang"); //这个库是存在的
if (database.open()) {
qDebug() << "连接 NAS 数据库成功";
} else {
qDebug() << "连接 NAS 数据库失败";
}
//连接mamp
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setUserName("root");
db.setPassword("root");
db.setPort(8889);
db.setDatabaseName("majiang");
// db.setDatabaseName("majiang"); //这个库是存在的
if (db.open()) {
qDebug() << "连接 NAS 数据库成功";
} else {
qDebug() << "连接 NAS 数据库失败";
}