找不到系统 header 文件的 C++ 版本
C++ version of system header files cannot be found
与“...在项目中添加 sqlite.c 之后”我应该继续,因为一切都很好。 Headers 像 cassert
、cerrno
、cstdio
,比方说,c*
确实存在并且通常编译器会看到它们并编译。
将 sqlite3.c
添加到项目后,现在我想象那些 header 文件的 .h
版本(assert.h
、errno.h
等)首先被添加到编译中,然后防止在其他文件中包含 c*
header 文件。
编译器报告:"cassert: No such file or directory"
,这不是事实。
我正在编译 qmake
/gcc
。
我该如何解决这个问题?
编辑: 看来问题与预编译header有关。在@Caduchon 的评论之后,我再次查看了编译日志,然后我看到了预编译 header:
gcc -x c++-header pre.hpp
...
gcc -x c-header pre.hpp
预编译 header 加入编译2次。第二个是c-header
。我想象当项目中没有 .c
文件时,预编译的 header 仅作为 c++-header
处理了 1 次。但是当还有一个 .c
文件时,它也被编译为 c-header
.
问题是因为预编译 header。当一个 .c
文件被引入项目时,预编译的 header 也被编译为 c-header
文件。为 C-compiler 注释掉 header 的 C++
部分解决了问题:
#ifdef __cplusplus
#endif
与“...在项目中添加 sqlite.c 之后”我应该继续,因为一切都很好。 Headers 像 cassert
、cerrno
、cstdio
,比方说,c*
确实存在并且通常编译器会看到它们并编译。
将 sqlite3.c
添加到项目后,现在我想象那些 header 文件的 .h
版本(assert.h
、errno.h
等)首先被添加到编译中,然后防止在其他文件中包含 c*
header 文件。
编译器报告:"cassert: No such file or directory"
,这不是事实。
我正在编译 qmake
/gcc
。
我该如何解决这个问题?
编辑: 看来问题与预编译header有关。在@Caduchon 的评论之后,我再次查看了编译日志,然后我看到了预编译 header:
gcc -x c++-header pre.hpp
...
gcc -x c-header pre.hpp
预编译 header 加入编译2次。第二个是c-header
。我想象当项目中没有 .c
文件时,预编译的 header 仅作为 c++-header
处理了 1 次。但是当还有一个 .c
文件时,它也被编译为 c-header
.
问题是因为预编译 header。当一个 .c
文件被引入项目时,预编译的 header 也被编译为 c-header
文件。为 C-compiler 注释掉 header 的 C++
部分解决了问题:
#ifdef __cplusplus
#endif