Eclipse CDT“无法解析符号NULL”

时间:2011-09-15 15:31:42

标签: c eclipse windows mingw eclipse-cdt

我刚刚使用Eclipse安装了CDT MinGW。 所有的环境变量都是设置的,包括等等。尝试运行一个hello world,一切似乎都很好。

我尝试在计算机中加载我之前拥有的C项目,它似乎可以加载所有内容,但我使用NULL符号出现以下错误:

Symbol 'NULL' could not be resolved

任何见解?谢谢!

13 个答案:

答案 0 :(得分:37)

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

而且,你总是可以这样做:

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

答案 1 :(得分:17)

正如鲍勃所说,我只是通过重建索引来修复错误

  1. 正确的项目
  2. 选择“索引”
  3. 选择“重建”

答案 2 :(得分:5)

我遇到了同样的问题:我的makefile运行正常,但是我从Eclipse CDT视图中收到了类似你的错误。

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

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

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

答案 3 :(得分:2)

  • 原因是:

stddef.h中定义了NULL,但stddef.h位于xxx/include/linux而不是xxx/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

答案 4 :(得分:1)

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

这可以解释其他人正在经历的随机性

答案 5 :(得分:1)

我认为您尚未添加定义 NULL 的头文件。添加stdlib.h(#include语句)。它定义了NULL宏。

答案 6 :(得分:0)

我在这里寻找答案,因为我发现CDT有时无法解析标准库的标题。我仍然不知道为什么以及如何重现这个bug。只需重新启动CDT即可解决所有问题。

答案 7 :(得分:0)

我遇到了同样的错误,我通过右键单击您的项目来修复它,将鼠标悬停在索引选项卡上,然后单击“重建”。之后我的错误就消失了。

答案 8 :(得分:0)

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

答案 9 :(得分:0)

我也遇到类似的问题,即“无法解析符号精灵魔法”,并且已经包含了精灵标题。我认为问题可能是由库缓存引起的,对于重启软件可以解决问题。感谢别人的帮助。

答案 10 :(得分:0)

以上建议没有对我有所帮助。 每次打开文件时,exclipse都会报告几十个错误。

最终有什么帮助: 关闭所有文件,然后手动删除错误(右键单击“问题”窗口中的错误列表),然后执行重建索引。

答案 11 :(得分:0)

这个问题在2019年仍然会出现...有许多不同的原因/解决方案。

我在NULL和stdio.h(stderr,printf等)中的所有内容的编辑器中都得到了未解析的符号,但编译正常。在我进入项目属性并删除一堆不必要的C / C ++包含路径之前,没有任何帮助。之后,重新索引解决了该问题。

在另一种情况下,我有一个未定义的类名称符号,该符号涉及某些条件预处理器宏欺骗。在C / C ++索引器选项(选中“启用项目特定的设置”之后)中,将定义宏的标头文件添加到“为特定标头的所有变体编制索引”中对其进行了修复。

这表明蚀CDT索引器很容易混淆。

答案 12 :(得分:0)

在Linux上将${COMMAND}设置为gcc

在“预处理程序包含路径,宏等”下和“ CDT GCC内置编译器设置”,如果您从现有Makefile项目中导入源,则存在一个未定义的${COMMAND}变量。

Eclipse尝试运行该命令以解析其stdout以查找标头,但是默认情况下未设置${COMMAND},因此它无法这样做。

我已经在"Unresolved inclusion" error with Eclipse CDT for C standard library headers

上对此进行了更详细的解释。