带作业要用,故踩坑
MySQL驱动
当重新装了最新的mysql-8.0.20-winx64后准备写代码,发现QSqlDatabase抛出错误信息:驱动未加载,判断是plugins文件夹下的mysqldriver内缺少了对应的dll
解决方法是打开Qt源码 [略]Qt\Qt5.14.1\5.14.1\Src\qtbase\src\plugins\sqldrivers\mysql
打开mysql.pro,选择对应的编译器进行编译,由于我使用msvc版本大于原生kit的版本(在原基础上替换了编译器为vs2019的),所以在编译时会提示msvc-version.conf已加载但是QMAKE_MSC_VER未设定。
打开[略]Qt\Qt5.14.1\5.14.1\msvc2017_64\mkspecs\common下的msvc-version.conf,拉到底部发现
所以在文件开头的warning前直接写上:QMAKE_MSC_VER = 1919
好了,现在点击编译,发现还是跳红:
L
i
b
r
a
r
y
′
m
y
s
q
l
′
i
s
n
o
t
d
e
f
i
n
e
d
.
\color{red}{Library 'mysql' is not defined. }
Library′mysql′isnotdefined. 经过尝试,发现直接注释掉pro中的这一行即可
分别在debug和release下编译后,把生成的dll文件扔到对应编译器版本的plugins\sqldrivers下面或者自己的发布目录当中,再次编译运行程序便能成功加载到QMYSQL驱动
添加Protobuf依赖
先从github上下载最新的protobuf-cpp源代码包,使用cmake编译,这里推荐使用msbuild生成器,因为我用mingw64的mingw32-make无法编译,懒得做更多修改尝试了…
编译后,将github上下载的包中的src文件夹添加到项目的INCLUDE_PATH,使用cmake生成vs的sin后,打开解决方案进行debug和release版本的编译。
将生成的libprotobuf(d).(lib/dll)复制到项目目录下,我这里直接LIBS+了debug版和release版的dll ,添加了hh和cc文件后初次编译程序发现链接器报错,百度后发现需要在.hh内添加宏PROTOBUF_USE_DLLS,我们直接选择在pro文件内添加DEFINES += PROTOBUF_USE_DLLS即可
编译通过后运行程序debug版在操作protocol对象时却抛出异常,abort了操作,后来尝试修改libprotobufd.dll文件名为libprotobuf.dll(release版的运行目录下直接复制生成的libprotobuf.dll,debug版的运行目录下复制debug生成版,去掉最后的d),这样程序可以正常运行,目前还未出现更进一步的问题。