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

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

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

Symbol 'NULL' could not be resolved

有什么见解吗?谢谢!

【问题讨论】:

    标签: c eclipse windows mingw eclipse-cdt


    【解决方案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 所说,我只是通过重建索引来修复错误

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

    【讨论】:

      【解决方案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做了更详细的解释

                        【讨论】:

                          猜你喜欢
                          • 2013-10-27
                          • 1970-01-01
                          • 1970-01-01
                          • 2012-06-03
                          • 1970-01-01
                          • 2013-12-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多