很久以前我将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_CORE_LIB -I .. \ Builder3d -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 \雷姆\应用程序数据\本地的\ Temp \ sqlite3.obj.20112.0.jom sqlite3.c
D:\ Qt \ 5.7 \ msvc2015_64 \ include \ QtCore / qnamespace.h(53):错误C2143:语法错误:缺少' {'之前' *'
D:\ Qt \ 5.7 \ msvc2015_64 \ include \ QtCore / qnamespace.h(68):错误C2061:语法错误:标识符' Qt'
D:\ Qt \ 5.7 \ msvc2015_64 \ include \ QtCore / qnamespace.h(68):错误C2059:语法错误:&#39 ;;'
D:\ Qt \ 5.7 \ msvc2015_64 \ include \ QtCore / qnamespace.h(68):错误C2449:找到' {'在文件范围(缺少函数头?)
所以在编译sqlite3.c的时候,尽管sqlite3.c中没有包含任何错误,但它给了我大量的qt库错误!
PS:我能想到的唯一的计算机配置变化是在安装VS更新后更新到MSVC编译器工具链。
PPS:我的项目配置为使用msvc2013& Qt 5.5。错误后,我试图使用msvc2015& Qt 5.7但问题仍然存在。
答案 0 :(得分:1)
我可以肯定发生的事情是包括“穿越”。
根据你的列表,sqlite3.c的编译会发生很多“-Ipath_to_qt”,所以包含传播qt头的路径。
然后,例如,sqlite3.c包含config.h来读取如何配置sqlite的选项。当然还有另一个来自某个qt include文件夹的config.h,这个config.h将引用/子包含带到qt。