macOS+Qt5.9+MySQL5.7.17连接数据库报错如下:
QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7 QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins查看QtAssisitant,章节How to Build the QMYSQL Plugin on Unix and macOS中提到:
cd $QTDIR/qtbase/src/plugins/sqldrivers/mysql qmake "INCLUDEPATH+=/usr/local/include" "LIBS+=-L/usr/local/lib -lmysqlclient_r" mysql.pro make具体到我的路径如下:
$ cd ~/Qt/5.9/Src/qtbase/src/plugins/sqldrivers/mysql $ qmake "INCLUDEPATH+=/usr/local/mysql/include" "LIBS+=-L/usr/local/mysql/lib -lmysqlclient_r" mysql.pro $ make但是执行make时报错如下,网上有同样问题,最后brew install qt5 --with-mysql重装Qt和MySQL才解决
ld: library not found for -lmysqlclient_r clang: error: linker command failed with exit code 1 (use -v to see invocation) make[1]: *** [../../../../plugins/sqldrivers/libqsqlmysql.dylib] Error 1 make: *** [release-all] Error 2发现在Qt文件中sqldriver目录下libqsqlmysql.dylib默认指向Mysql文件的位置不对。
$ cd ~/Qt/5.9/clang_64/plugins/sqldrivers $ otool -L libqsqlmysql.dylib libqsqlmysql.dylib: libqsqlmysql.dylib (compatibility version 0.0.0, current version 0.0.0) @rpath/QtSql.framework/Versions/5/QtSql (compatibility version 5.9.0, current version 5.9.0) @rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.9.0, current version 5.9.0) /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) /opt/local/lib/mysql55/mysql/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)#这一行 /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)查看我的MySQL实际路径为/usr/local/mysql/lib/libmysqlclient.20.dylib 于是将Qt默认指向位置和正确的指向位置之间建立一个软连接,将它们连接起来。
在默认指向的位置建好相应的文件夹
$ sudo mkdir -p /opt/local/lib/mysql55/mysql/建立软连接
$ sudo ln -s /usr/local/mysql/lib/libmysqlclient.20.dylib /opt/local/lib/mysql55/mysql/libmysqlclient.18.dylib解决问题!
QT只能连接mysql里面已有的数据库,然后才能创建数据库表等。 创建mysql数据库需要在mysql里面操作,或者用mysql的可视化工具操作, 或者先不执行db.setDatabaseName("mydata");,仅连接open数据库,然后利用 QSqlQuery查询语句create database mydata;去创建数据库,使用数据库。
我个人使用 brew install qt5 --with-mysql重装Qt和MySQL,安装持续了108min,期间电脑风扇狂转。
若qmake路径是无法直接访问的隐藏路径,可用command+shift+G然后输入路径跳转
Mac下Qt连接MySQL 驱动问题 在mac下使用qt5连接mysql5.7 Mac下Qt连接MySql数据库