Eclipse CDT:Glib标头未正确解析

时间:2017-03-09 11:02:36

标签: c eclipse eclipse-cdt glib

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

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

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

我希望我的Eclipse IDE可以搜索嵌套的头文件(#include里面的#inlcude ......)来找到那些类型定义,以便不会突出显示那些烦人的错误。我怎么能这样做?我不想直接包含完成类型定义的所有文件。

编辑:正如Jonah Graham所述,问题不在于Eclispe进行的单步研究&#34;在标题上,因为它检查包含内部其他包括像任何其他IDE。这是c和Eclipse

的CMake错误

提前致谢。

1 个答案:

答案 0 :(得分:3)

您遇到的问题是CMake bug *。 CMake无条件地将__cplusplus添加到已定义的符号中,这意味着在C模式下无法正确解析 glib 标头。您可以通过围绕gmacros.h

的定义打开G_BEGIN_DECLS来清楚地看到这一点

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,然后按确定
  4. enter image description here

    1. (有时是必要的)右键单击项目 - &gt; 索引 - &gt; 重建
    2. *如果您更了解CMake,可能还有其他一些解决方法。该错误说明它将在下一版CMake中修复。