Eclipse CDT“无法解析符号 NULL”

Posted

技术标签:

【中文标题】Eclipse CDT“无法解析符号 NULL”【英文标题】:Eclipse CDT "Symbol NULL could not be resolved" 【发布时间】:2011-11-18 00:09:53 【问题描述】:

我刚刚安装了Eclipse CDTMinGW。 所有环境变量都已设置、包含等。尝试运行 hello world,一切似乎都很好。

我尝试在我的计算机中加载我之前拥有的 C 项目,它似乎可以正常加载所有内容,但我收到以下带有 NULL 符号的错误:

Symbol 'NULL' could not be resolved

有什么见解吗?谢谢!

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

其实我不认为标准的标题相互包含;定义NULL 的几个标头中的每一个都是独立执行的。您可以自己定义,但没有充分的理由这样做;只需包含标题。 @Keith - 也许在某些系统上,但在 Linux 上,stdlib.h 包括 stddef.h。这是谷歌代码搜索的一个例子 - [google.com/codesearch#XAzRy8oK4zA/libc/include/… 好的,但是效果好像不包含一样。这:#include <stdlib.h> int main(void) offsetof(struct int i; , i); return 0; 编译失败。 这不是解决问题的方法,只是忽略了症状【参考方案2】:

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

    正确的项目 选择“索引” 选择“重建”

【讨论】:

【参考方案3】:

我遇到了同样的问题:我的 makefile 运行良好,但在 Eclipse CDT 视图中出现了类似您的错误。

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

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

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

【讨论】:

【参考方案4】: 原因是:

stddef.h 中定义了NULL,但stddef.hxxx/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

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

【讨论】:

【参考方案5】:

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

这或许可以解释其他人所经历的有时随机性

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

我在这里寻找答案,因为我发现 CDT 有时无法解析标准库的标头。我仍然不知道为什么以及如何重现该错误。重启CDT就可以解决了。

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

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

【讨论】:

你自己有没有遇到过类似的问题? 是的,我的问题是“符号'精灵魔法'无法解决” 欢迎来到 SO。关于发布答案的一些提示。如果出现以下情况,请发布答案: 1. 您遇到类似问题并且能够解决。 2.您认为您的答案可以有所贡献(例如您的解决方案不同,或者问题略有不同但与原始问题相关)。在您的答案中包含更多详细信息。【参考方案11】:

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

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

【讨论】:

【参考方案12】:

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

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

在另一种情况下,我有一个未定义的类名符号,该符号涉及一些条件预处理器宏诡计。将定义宏的头文件添加到 C/C++ 索引器选项中的“索引特定标头的所有变体”(在检查“启用项目特定设置后”)修复它。

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

【讨论】:

【参考方案13】:

在 Linux 上将 $COMMAND 设置为 gcc

在“预处理器包括路径、宏等”下。如果您从现有的 Makefile 项目导入源代码,则“CDT GCC 内置编译器设置”有一个未定义的 $COMMAND 变量。

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

我已经在"Unresolved inclusion" error with Eclipse CDT for C standard library headers做了更详细的解释

【讨论】:

以上是关于Eclipse CDT“无法解析符号 NULL”的主要内容,如果未能解决你的问题,请参考以下文章

centos 配置eclipse jdt和cdt

Eclipse/CDT 漂亮的打印错误

Eclipse cdt mingw配置记录

在 Eclipse-CDT Juno 中禁用 EGit

Eclipse CDT ast 和 model 包之间的区别

如何使用 Eclipse CDT 构建 SCons 项目?