2011-09-15 201 views
24

我刚安装EclipseCDTMinGW。 所有的环境变量设置,包括等尝试运行一个hello世界,一切似乎都很好。Eclipse CDT“符号NULL无法解析”

我试图加载C项目,我在电脑前了,似乎加载样样精,但我得到与NULL符号以下错误:

Symbol 'NULL' could not be resolved 

任何见解?谢谢!

回答

31

NULL通常在stddef.h中定义。该文件通常也包含在stdlib.h和stdio.h中。

而且,你总是可以做到这一点:

#ifndef NULL 
#define NULL ((void *) 0) 
#endif 
+0

其实我不认为标准标题包含对方;定义“NULL”的几个头中的每一个都是独立的。你可以自己定义它,但没有理由这样做。只需包含标题即可。 –

+1

@Keith - 也许在某些系统上,但在Linux上,stdlib.h包含stddef.h。这里是一个谷歌代码搜索的例子 - [http://google.com/codesearch#XAzRy8oK4zA/libc/include/stdlib.h&q=stdlib.h&type=cs] –

+0

好吧,但效果就好像它不包括它。这个: '#include int main(void){ offsetof(struct {int i;},i); return 0; }' 无法编译。 –

0

我在这里寻找答案这一点,因为我发现CDT有时会失败,解决标准库的头。我仍然不知道为什么以及如何重现错误。只需重新启动CDT,全部解决。

5

我有同样的问题:我的生成文件运行良好,但我从Eclipse CDT视图中得到类似你的错误。

我关闭了当前的项目,我打开了一个新的“使用现有代码的Makefile项目”,指定了我的项目的正确位置源位置。在此之后,我检查了: 右键项目/ C++ general /路径和符号/ Gnu C++/include目录不是空的,并且包含我的项目的正确路径。

然后,我重建了索引(右键/索引/重建)。

此外,我使用Eclipse CDT 7而不是Eclipse CDT 8,因为CDT8有时会给我编译GUI的错误,但无法解决,尽管makefile很好。

+0

+1一直在寻找这个解决方案。 – chux

14

正如鲍勃提到的,我修正错误只是重建索引

  1. 权项目
  2. 选择“索引”
  3. 选择“重建”
0

我是有这个同样的错误,我通过右键单击您的项目来解决它,将鼠标悬停在索引选项卡上,然后单击重建。之后我的错误就消失了。

2
  • 的原因是:在stddef.h定义

NULL,但stddef.hxxx/include/linuxxxx/include

- 即使你已经添加的MingW的xxx/include,仍然无法找到NULL

    >
  • 解决方法是:

添加您的MingW的include/linux路径到项目

  • 引荐

(1)我的XScale交叉编译的include/linux路径的例子:/opt/crosscompile/xscale/gcc-4.6.0-glibc-2.9/arm-xscale-linux-gnueabi/sysroot/usr/include/linux

added GNU C++ include linux path

(2 )我的帖子:Ubuntu Eclipse: Symbol ‘NULL’ could not be resolved

1

我只是修复了这样的错误,并认为没有人发现这个解决方案,我会发布它。我发现stdlib在我的AVR GCC编译器中声明了NULL作为___need_NULL。这在Eclipse IDE中导致了一个错误。然而,这个错误是由Coden Analysis引起的,没有发现异常,因此无法找到符号。您可以在“常规 - >启动/关闭”下的“首选项”中关闭Coden或更改其在C/C++代码分析中的行为。

这也许可以解释有时随机性其他人也遇到

1

我认为你还没有加入定义NULL头文件。添加stdlib.h(#include语句)。它定义了NULL宏。

0

只需将C:\MinWG\lib添加到Eclipse的库路径中即可。

0

我也遇到类似的问题,就是“符号精灵魔法无法解析”,并且已经包含了精灵头文件。我认为这个问题可能是由库缓存引起的,因为重新启动软件可以解决问题。感谢他人的帮助。

+0

你有没有遇到类似的问题? – Alex

+0

是的,我的问题是“符号”精灵魔术“无法解决” – user6528152

+0

欢迎来到SO。有关发布答案的一些提示。发布答案如果:1。你遇到了类似的问题,并能够解决它。 2.你认为你的答案可以起作用(例如,你的解决方案是不同的,或者问题稍有不同,但与原始问题有关)。在你的答案中包含更多细节。 – Alex