经过两天的折磨和挣扎,将Mac上QT与mysql数据库链接问题的解决做一个梳理,以防忘记,并供他人借鉴;
环境版本:Mac10.14,MySQL5.7.24,Qt5.14.2
首先我重新下载安装了Qt(安装了源码,即勾选了source),然后重新安装了MySQL,期望重新安装后,Qt的~/clang_64/plugins/sqldrivers/ 路径下自动存在mysql驱动,即libqsqlmysql.dylib,正如已经存在的libqsqlite.dylib等一样,然后看到的是失望。
于是我在重新编译mysql驱动 与 采用ODBC中间件之间进行了选择,很不幸,我首先选择了后者,我的想法是一劳永逸,学会使用中间件;
然而,Mac上安装ODBC首先需要安装ODBC manager数据管理器,于是我照做了,结果,Mac上免费的ODBC manager实在不好用,甚至有问题,这里不排除是我找的版本不好,查了查,有收费试用的,看着还不错,不过我放弃了。
于是我不得不面对重新编译mysql驱动,此方法最终成功了,但是该方法在实现过程中,遇到的问题,对于软件小白的我,折腾了一晚上,在此记录一下;
1、首先确保下载安装的qt源码路径中是否有mysql.pro工程,即/Users/sunnyfish/Qt/5.14.2/Src/qtbase/src/plugins/sqldrivers/mysql/ 此路径下;
2、用Qt打开此路径下的mysql.Pro,
查看pro文件,注释掉第6行,即QMAKE_USE += mysql, 并添加最后三行;
这里需要说明,注释掉的,是因为后续编译时,报错:Project ERROR: Library 'mysql' is not defined.
添加的三行中,LIBS最好使用绝对路径,并且用双引号包起来,否则可能会报错:ld: library not found for -llibmysqlclient.20
3、接下来是编译,如果直接用Qtcreator左下边的小锤子编译,应该会报错:Cannot write file /mkspecs/modules-inst/qt_plugin_qsqlmysql.pri: Cannot create parent directory
这是由于权限不够导致的,这里就由面临选择了,有人说通过高权限运行编译,有人说将/Users/sunnyfish/Qt/5.14.2/Src/qtbase/的qtbase文件夹移到其他地方,不受权限制约再编译;
我又先选择了后者,于是失败了,反正我失败了;
4、采用高权限,在终端运行sudo qmake 和sudo make实现编译;具体方法引用别人教程:
编译成功后的效果如下:
并且运行最后一句查找命令,可以找到libqsqlmysql.dylib文件,如下:
5、将/Users/sunnyfish/Qt/5.14.2/Src/qtbase/src/plugins/sqldrivers/libqsqlmysql.dylib此路径下的libqsqlmysql.dylib
复制到/Users/sunnyfish/Qt/5.14.2/clang_64/plugins/sqldrivers/路径下;
6、创建Qt工程,在.pro文件中添加QT += sql
在主程序中用如下代码进行测试,记得将数据库用户名和密码填写对,我的成功了。
只能说Mac真的让我又爱又恨。。。