今天尝试使用MAC上的QT连接mysql数据库,但是一直提示连接失败,lastError().text()显示原因是无法加载驱动。
网上也有很多关于这个问题的解决方法,但是很多解决方案都是针对windows平台的,找到仅有的几篇mac os平台的可是针对都是旧版本的QT,很多讲的云里雾里解决不了问题。导致我前前后后捣鼓了两个多小时。
找了很多资料,好歹对这个问题也有了一定理解,所以整理一篇博客,希望帮助到遇到相同问题的人。
首先,mac系统上QT连接mysql数据库需要调用一个名libqsqlmysql.dylib的动态库,这个插件可能不同的电脑会有不同的路径,可以参考我的:> /Users/XXX/Qt5.11.3/5.11.3/clang_64/plugins/sqldrivers/libqsqlmysql.dylib(其中XXX是我的Users用户名)
如果找不到的话可以直接在QT根目录种进行查找
运行这个动态库又会调用到许多其他mysql的动态库,而QT的这个问题一般都是出在这几个被调用的其他动态库上(找不到这几个动态库或者动态库不对印)
所以我们可以先查看一下libqsqlmysql.dylib指向哪一些库
终端中输入
$ otool -L /Users/XXX/Qt5.11.3/5.11.3/clang_64/plugins/sqldrivers/libqsqlmysql.dylib
结果如图所示:
我们发现输出结果中有一行奇怪的路径(图中选中部分),实际上我们/usr/local/mysql/lib路径下的libmysqlclient.*.dylib文件不一定是叫做libmysqlclient.20.dylib,(中间的那个版本号不一定是20)但是QT固定成了20,所以编译的时候找不到这个动态库,从而连接失败。
解决方法:按照路径改文件,把libmysqlclient.*.dylib文件改为路径上对印的文件名(不一定是libmysqlclient.20.dylib,可能是其他版本,按照终端输出的信息来)。
如果在/usr/local/mysql/lib下找不到libmysqlclient文件,可以上网下载或者搜索mysql目录。