Eclipse CDT "Symbol NULL could not be resolved"

31

我刚刚安装了Eclipse CDTMinGW。所有环境变量都已设置,包括头文件等。尝试运行hello world程序,似乎一切正常。

我试图加载之前在电脑上的一个C项目,它似乎可以正常加载所有东西,但是我得到了以下关于NULL符号的错误:

Symbol 'NULL' could not be resolved

有什么见解吗?谢谢!

13个回答

42

NULL通常在stddef.h中定义。这个文件通常也随着stdlib.h和stdio.h一起包含。

另外,你可以这样做:

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

实际上,我认为标准头文件并不互相包含;定义“NULL”的几个头文件都是独立的。你可以自己定义它,但没有充分的理由这样做;只需包含头文件即可。 - Keith Thompson
1
@Keith - 或许在某些系统上是这样,但在Linux上,stdlib.h包含stddef.h。这里有一个Google Code Search的例子 - [http://google.com/codesearch#XAzRy8oK4zA/libc/include/stdlib.h&q=stdlib.h&type=cs] - Man Vs Code
好的,但效果就像没有包含它一样。这个代码: #include <stdlib.h> int main(void) { offsetof(struct { int i; }, i); return 0; } 编译失败。 - Keith Thompson
这只是忽略症状,而不是解决问题的方法。 - Andrés Alcarraz

24

正如Bob所提到的,我仅通过重新构建索引来修复了该错误。

  1. 打开你的项目
  2. 选择“索引”
  3. 选择“重建”

5
我遇到了同样的问题:我的 makefile 运行正常,但是我从 Eclipse CDT 视图中得到了与您相似的错误信息。
我关闭了当前项目,打开了一个新的“使用现有代码的 Makefile 项目”,指定了我的项目正确的源位置。之后,我检查了以下内容:
右键单击项目 / C++ 通用 / 路径和符号 / Gnu C++ / 包含目录不为空,并包括我的项目的正确路径。
然后,我重建了索引(右键单击 / 索引 / 重建)。
此外,我使用的是 Eclipse CDT 7 而不是 Eclipse CDT 8,因为 CDT8 有时会从 GUI 给我编译错误,即使 makefile 是正确的,我也无法解决。

3
  • 原因是:

NULL被定义在stddef.h中,但是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

added GNU C++ include linux path

(2) 我的帖子:Ubuntu Eclipse:符号“NULL”无法解析


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

这可能解释了其他人经历的随机性。


1

我认为您没有添加定义NULL的头文件。请添加stdlib.h(#include声明),它会定义NULL宏。


0

这个问题在2019年仍然存在……有许多不同的原因/解决方案。

我在编辑器中使用NULL和stdio.h(stderr、printf等)时出现了未解析的符号,但编译工作正常。直到我进入项目属性并删除了一堆不必要的C/C++包含路径之后,没有任何帮助。之后重新索引修复了问题。

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

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


0

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

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

Eclipse尝试运行该命令以解析其stdout以查找头文件,但默认情况下未设置${COMMAND},因此无法执行此操作。

我已在{{link1:“Eclipse CDT用于C标准库头文件的未解决的包含”错误}}中详细说明了这一点。


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

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

你自己遇到过类似的问题吗? - Alex
是的,我的问题是“无法解析符号'elf magic'”。 - user6528152
欢迎来到SO。以下是关于发布答案的一些提示。如果:1.您遇到了类似的问题并成功解决了它。2.您认为您的答案可以做出贡献(例如,您的解决方案不同,或者问题略有不同但与原始问题相关)。请在您的答案中包含更多细节。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接