新手使用qt6 编译mysql驱动的坑

程序使用mysql的历程,做为新手,到处都是坑,有些问题解决后才发现,哦,原来是这样简单。

  1. 连接mysql数据库,必须自行使用源代码编译生成mysql驱动文件,安装qt时必须勾选source,源代码在C:\Qt\6.8.2\Src\qtbase\src\plugins\sqldrivers\mysql目录,打印发现少了很多文件,如mysql.pro等,只能百度自己创建一个mysql文件。
  2. qsql_mysql.cpp文件引用的h头文件路径很多不对,一般mysql引用的h头文件在三个目录:QtSql,QtCode,private,最神奇就是private一时找不到,结果发现在 6.8.2\msvc2022_64\include\QtSql\6.8.2\QtSql\private,路径很奇怪
  3. 上面所有头文件梳理完,再构建,又提示: error: C2065: “MYSQL_OPT_SS: 未声明的标识符,经查因为mysql数据库版本太旧?我使用的5.1的,只能下载个新版mysql8,安装好后配置lib和include目录(只需要这两目录,其它安装mysql的电脑复制过来也可以),又有错误提示:“QMYSQLDriver::staticMetaObject”: 不允许 dllimport 静态数据成员 的定义,算了,改不动了,我还是直接去下载个源码来编译吧,https://download.qt.io/archive/qt/6.8/6.8.2/submodules/,找到qtbase-everywhere-src-6.8.2.zip
  4. 单独复制mysql的lib和include两文件夹到一个英文文件夹里,并且路径不要有空格(听劝就对)
  5. 编辑C:\Qt\6.8.2\Src\qtbase\src\plugins\sqldrivers\.cmake.conf,添加SET(FEATURE_sql_mysql ON)
    SET(MySQL_INCLUDE_DIR "D:/MySQL8/include")
    SET(MySQL_LIBRARY "D:/MySQL8/lib/libmysql.lib")
  6. 用QTCreator打开文件C:\Qt\6.8.2\Src\qtbase\src\plugins\sqldrivers\CMakeLists.txt。
  7. 打开后,第一步就过不去了,提示No suitable kits found,但是我已安装好desktop QT 6.8.2 MinGW 64 bit和MSVC2022 64 bit。
  8. 鼠标放在左边有感叹号的套件上,提示少了cmake,在qt根目录下运行MaintenanceTool.exe,安装上cmake和ninja,然后 管理构建套件 里,点击套件,在下方的 cmake tool里选上cmake,应用后就可以了。
  9. 终于进入到构建程序阶段,又又又有问题,构建提示: error: 'MYSQL_OPT_SSL_KEY' was not declared in this scope;等9点相似的错误,经查是因为mysql数据库太旧(用的5.1),改成mysql8,编译通过,生成的文件在C:\Qt\6.8.2\Src\qtbase\src\plugins\sqldrivers\build\Desktop_Qt_6_8_2_MinGW_64_bit-Debug\plugins\sqldrivers目录下
  10. 但这是mingw,而我的项目是使用msvc(项目中用到webengineview,必须要求msvc),切换到msvc后又出错了,无法正确加载项目:很好很QT,翻来找去,不知道怎么弄,看到网上说在cmakelists.txt最前面加上set(CMAKE_C_COMPILER_WORKS TRUE)
    set(CMAKE_CXX_COMPILER_WORKS TRUE)以跳过前面的检测,确实有效,可以正常加载项目出来了,但编译提示 error: C1083: 无法打开包括文件: “windows.h”: No such file or directory 12个类似的错误,最后在项目->构建->Build Environment编辑Include添加上Windows SDK的路径C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\include;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\ATLMFC\include;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.20348.0;C:\Program Files (x86)\Windows Kits\10\Include\10.0.20348.0\cppwinrt\winrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.20348.0\shared;C:\Program Files (x86)\Windows Kits\10\Include\10.0.20348.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.20348.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.20348.0\winrt 后,再构建项目,终于能正常生成驱动文件了。
  11. 又有问题来了,把生成的qsqlmysql.dll和qsqlmysqld.dll都放进C:\Qt\6.8.2\msvc2022_64\plugins\sqldrivers目录下,连接数据库的项目构建release没问题,但构建debug则会提示Driver not loaded Driver not loaded,虽然显示QSqlDatabase: available drivers: QSQLITE QMIMER QMARIADB QMYSQL QODBC QPSQL已经有mysql驱动,真带劲,又有问题可以研究了,最后发现在debug的exe路径下有两个libmysql文件,是mysql5放的,删掉或放mysql8的版本进去,问题解决,至此,mysql上路了
  12. 顺带一个解决编译输出这些地方中文乱码问题(原因是QTCreator使用是UTF-8,而系统是中文的GBK):1.控制面板\时钟和区域\区域\管理\更改系统区域设置,勾选 Beta版,使用UTF-8 ... ,然后重启系统,2.项目->管理构建套件->环境->interface->语言,从下拉菜单中选择chinese(china),下面的Text codec for tools也改为utf-8,重启qtcreator就可以看到中文了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值