c - eclipse CDT : Glib headers not parsed correctly

标签 c eclipse eclipse-cdt glib

我正在开发一个 C 应用程序,并使用 Eclipse CDT IDE,我觉得它很棒。该项目使用 Glib、Gtk 和 GStreamer ,因此每当我在文件中使用它们的某些功能时,我需要包括:

#include <glib.h>
#include <gtk/gtk.h>
#include <gst/gst.h>

代码编译没有任何错误,因为用于搜索这些 header 的 PATH 变量已在 CMakeLists.txt 中正确设置。 但是,在处理该项目时,我发现我的代码中突出显示了烦人的错误,这些错误与 gcharGValueGTKApplication 等类型定义有关;概述的错误是“无法解析符号 ****”。这些定义在我的 Eclipse IDE 无法找到的头文件中(包含在 glib.h 中),如果不是在编译时(实际上程序编译正确)。相反,预编译器不会将 gst.h 中定义的类型 GError 突出显示为错误。

然后我希望我的 Eclipse IDE 可以搜索嵌套的 header (#include inside an #inlcude inside...)以找到那些类型定义,这样就不会突出显示那些恼人的错误。我该怎么做?我不想直接包含完成类型定义的所有文件。

编辑:正如 Jonah Graham 所概述的,问题不是因为 Eclispe 对 header 进行了“单步研究”,因为它像任何其他 IDE 一样检查其他包含项中的包含项。这是 C 和 Eclipse 的 CMake 错误

提前致谢。

最佳答案

您面临的问题是 CMake bug *。 CMake 无条件地将 __cplusplus 添加到定义的符号中,这意味着 glib header 在 C 模式下无法正确解析。您可以通过围绕 G_BEGIN_DECLS 的定义打开 gmacros.h 清楚地看到这一点:

enter image description here

因为 CMake 告诉 CDT __cplusplus 已定义,它认为 G_BEGIN_DECLS 也已定义,这使得来自 gtypes.h 的代码无法正确解析:

G_BEGIN_DECLS

/* Provide type definitions for commonly used types.
 *  These are useful because a "gint8" can be adjusted
 *  to be 1 byte (8 bits) on all platforms. Similarly and
 *  more importantly, "gint32" can be adjusted to be
 *  4 bytes (32 bits) on all platforms.
 */

typedef char   gchar;
...

当然,如果没有定义 gchar,其他一切都会变得很糟糕。

幸运的是,在 CMake 中解决问题之前,有一个快速的解决方法,从 CDT 的信息中删除 __cplusplus

  1. 打开项目属性
  2. C/C++ 包含路径和符号
  3. 从列表中删除 __cplusplus 并按 OK

enter image description here

  1. (有时需要)右键单击项目 -> 索引 -> 重建

* 如果您更了解 CMake,可能还有一些其他解决方法。该错误还表示它将在下一个 CMake 版本中修复。

关于c - eclipse CDT : Glib headers not parsed correctly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42693631/

相关文章:

c - 这个算法是如何工作的?

java - 学习构造函数 - 无输出

java - Eclipse:显示类文件的代码源?

c++ - .so build error coming - 请建议(eclipse CDT cygwin)

c - 无法将 libusb 链接到 Mac 上的 C 项目

c - 代码中的时间复杂度?

c - 链接功能不会按预期将最大项目放在列表的末尾

python - 使用 AppEngine 开发服务器在 PyDev 中调试控制台

windows - Qt 是否支持 windows 蓝牙 API?

c++ - Makefile:链接器错误