mac qt mysql_最新Qt 5.14.1、mysql8.0.19和超级详细 Mac下自己编译Qt 5.14.1的MySQL动态链接库【已解决】————附赠编译好的驱动...

文章目录

1 问题(编译msyql动态链接库)

2 连接动态库

3 收获

4 福利

1 问题(编译msyql动态链接库)

最开始是使用Qt Creator的mysql驱动,结果和qmake的版本不一致,出错

Cannot mix incompatible Qt library (version 0x50c01) with this library (version 0x50c02)

解决版本:下载qt源代码(最好是下载的就包括Sources,里面就是源代码)

823d92dadf554dd971acba14cb949edf.png

然后自己编译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"

但是由于文件权限原因:

23e5c81742d8b4323ee7a14b4e172d55.png

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编译:

如果遇到

c50a7c311a04fbcbeae6b8cd4f949dab.png

解决办法:使用文本编译器打开.pro文件,然后把QMAKE_USE += mysql注释了,也就是#QMAKE_USE += mysql,然后再次编译问题解决。

编译代码如下(其中make:编译,make install:安装

【make是用来编译的,它从Makefile中读取指令,然后编译。make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。】):

b70f810d9e4361024bb7520a37087b48.png

最后终于成功了,编译后的文件路径:/usr/local/Cellar/qt/5.14.1/plugins/sqldrivers/libqsqlmysql.dylibc40707c58924403538ca9a3cc335a6f9.png

铛铛铛,编译文件成功。

a0d95af9312cf51c654320e4ff45af24.png

不容易呀!!

弄了三天才编译好。widnows都有现成的lib和dll库,但是mac就是不行。。。

2 连接动态库

编译好了,但是使用连接动态库的时候,却遇到了问题:

a642af206b56797e0e9aa0d3c2b00f01.png

在项目里添加环境变量QT_DEBUG_PLUGINS,值为1,也就是蓝色部分【目的是为了打印插件信息】,如下:cb7b082e497478cf5a8adb177fafabb2.png

再次运行程序:

#include

#include

#include

#include

int main(int argc, char** argv){

QApplication a(argc, argv);

qDebug()<

QStringList drivers = QSqlDatabase::drivers(); //获取现在可用的数据库驱动

foreach(QString driver, drivers)

qDebug() << driver;

QSqlDatabase database = QSqlDatabase::addDatabase("QMYSQL");

return a.exec();

}

显示插件详细信息:

18a3c998346ef431f31819a2daca489a.png

也就是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

打印动态库的连接信息,显示结果为:

9c4616465726a1202083b614b34202ff.png

通过仔细观察,发现@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,显示:

64a23d98069b75d98578853d57bf2fd6.png

这说明连接成功。

最后再次运行程序,

82546ee96551b65a91a39a46b37f0d42.png

说明连接成功。哈哈mac连接mysql驱动,再次终于圆满结束。

3 收获

1 遇到问题,多去Qt官方论坛https://forum.qt.io/categories。

2 下载Qt(http://download.qt.io/archive/qt/)的时候,选择一定要把Soureces勾选上,也就是Qt源代码,方便以后编译。

3 清楚了Qt的build环境的配置以及动态连接库。

4 福利

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 数据库失败";

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值