【问题标题】:Error compiling sqlite in qmake project在 qmake 项目中编译 sqlite 时出错
【发布时间】:2016-10-09 18:31:12
【问题描述】:

很久以前,我将 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 \Rem\AppData\Local\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:语法错误:';'

D:\Qt\5.7\msvc2015_64\include\QtCore/qnamespace.h(68): error C2449: found '{' at file scope (missing function header?)

所以在编译 sqlite3.c 时,它给了我大量来自 qt 库的错误,尽管事实上 sqlite3.c 不包含它们中的任何一个!!!

PS:我能想到的唯一改变我的计算机配置是在安装 VS 更新后更新到 MSVC 编译器工具链。

PPS:我的项目配置为使用 msvc2013 和 Qt 5.5。出现错误后,我尝试使用 msvc2015 & Qt 5.7,但问题仍然存在。

【问题讨论】:

  • 您是否使用 extern 关键字将 sqlite.c 包含到您的项目中。
  • 不,我将 sqlite3.c 添加到 qmake 文件中的 SOURCES 并在其他文件中包含 sqlite3.h

标签: c++ qt sqlite qmake


【解决方案1】:

我可以确定发生的事情是包含的“交叉”。

根据您列出的内容,sqlite3.c 的编译发生了很多“-Ipath_to_qt”,因此传播了 qt 标头的包含路径。

然后,例如,sqlite3.c 包含 config.h 以读取如何配置 sqlite 的选项。当然还有另一个 config.h 来自某个 qt 包含文件夹,这个 config.h 将引用/子包含带到 qt。

【讨论】:

  • 我明白了。有两个问题:为什么以前编译成功,如何修复?
  • 简单的新 Qt 5.5 现在有例如这个 config.h 而以前的版本没有
  • 试着评论一下#include config.h
  • 复制粘贴命令行编译 sqlite3.c 到控制台,删除所有 -I 到 Qt 并尝试编译。就像测试它来自那里一样。
  • 很难将 sqlite3.h 更改为由 Sqlite 团队从所有来源制作的捆绑包。是否可以配置 qmake 不向特定文件添加包含路径?
猜你喜欢
  • 1970-01-01
  • 2017-01-07
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多