Eclipse CDT“无法解析符号 NULL”
Posted
技术标签:
【中文标题】Eclipse CDT“无法解析符号 NULL”【英文标题】:Eclipse CDT "Symbol NULL could not be resolved" 【发布时间】:2011-11-18 00:09:53 【问题描述】:我刚刚安装了Eclipse
CDT
和MinGW
。
所有环境变量都已设置、包含等。尝试运行 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.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
(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”的主要内容,如果未能解决你的问题,请参考以下文章