很久以前,我将 sqlite3.c 文件添加到我的 qmake 项目中,并使用 msvc-2013 和 gcc-5.2 64 位编译器成功编译了这个项目几个月。
然而,当我最近尝试重新编译这个项目时,它成功编译了所有文件,但 sqlite3.c 文件除外!它给了我奇怪的错误信息:
cl -c -nologo -Zc:wchar_t -FS -Zc:strictStrings -Zi -MDd -W3 -w44456 -w44457 -w44458/Fddebug\Builder3d.pdb -DUNICODE -DWIN32 -DWIN64 -DVL_PLATFORM_WINDOWS=1 - DVL_OPENGL=1 -D_UNICODE=1 -DNOMINMAX -D_USE_MATH_DEFINES -D_SCL_SECURE_NO_WARNINGS -DPROTOBUF_USE_DLLS -DB3D_DEBUG -DQT_GUI_LIB -DQT_SQL_LIB -DQT_WEBSOCKETS_LIB -DQT_NETWORK_LIB -DQT_NETWORK_LIB -DQT_I.CORE3d -I._LIB -I -I..\libs\c3d\v98099\Win64_Visual_Studio_2013_Unicode\Include -I..\libs -I..\libs\protobuf\cmake\build\debug\include -ID:\Qt\5.7\msvc2015_64\include -ID:\Qt\5.7\msvc2015_64\include\QtGui -ID:\Qt\5.7\msvc2015_64\include\QtANGLE -ID:\Qt\5.7\msvc2015_64\include\QtSql -ID:\Qt\5.7\msvc2015_64\include\QtWebSockets - ID:\Qt\5.7\msvc2015_64\include\QtNetwork -ID:\Qt\5.7\msvc2015_64\include\QtCore -Idebug -ID:\Qt\5.7\msvc2015_64\mkspecs\win32-msvc2015 -Fodebug\@C:\Users\Rem\AppData\Local\Temp\sqlite3.obj.20112.0.jom sqlite3.c
D:\Qt\5.7\msvc2015_64\include\QtCore/qnamespace.h(53): error C2143: 语法错误:'*' 前缺少'{'
D:\Qt\5.7\msvc2015_64\include\QtCore/qnamespace.h(68): error C2061: 语法错误:标识符 'Qt'
D:\Qt\5.7\msvc2015_64\include\QtCore/qnamespace.h(68): error C2059: 语法错误: ';'
D:\Qt\5.7\msvc2015_64\include\QtCore/qnamespace.h(68): error C2449: 在文件范围内找到“{”(缺少函数头?)
所以在编译 sqlite3.c 时它给了我大量来自 qt 库的错误,尽管事实上 sqlite3.c 不包含任何错误!!!
PS:我能想到的我的计算机配置的唯一变化是安装 VS 更新后更新到 MSVC 编译器工具链。
PPS:我的项目配置为使用 msvc2013 和 Qt 5.5。错误后我尝试使用 msvc2015 & Qt 5.7 但问题仍然存在。
最佳答案
我可以确定发生的是include的“交叉”。
从您列出的内容来看,sqlite3.c 的编译发生了很多“-Ipath_to_qt”,因此包含传播到 qt header 的路径。
然后,例如,sqlite3.c 包含 config.h 来读取应该如何配置 sqlite 的选项。当然还有另一个 config.h 来自某个 qt include 文件夹,这个 config.h 为 qt 带来了引用/子包含。
关于c++ - qmake项目编译sqlite出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37720287/