Eclipse CDT for C标准库头文件中存在“未解决的包含”错误

时间:2012-02-18 01:39:30

标签: c eclipse eclipse-cdt standard-library

我为eclipse设置了CDT并编写了一个简单的hello world C程序:

#include <stdio.h>

int main(void){
    puts("Hello, world.");
    return 0;
}

该程序正确构建并运行,但当我将鼠标置于其上时,eclipse会在包含语句旁边显示这个黄色问号时显示"Unresolved inclusion: <stdio.h>"

它不会影响程序的运行,但我觉得它很烦人。

有没有人知道如何删除它?

14 个答案:

答案 0 :(得分:49)

Eclipse正在使用的编译器能够很好地解析符号,因此代码编译正常。

但Eclipse使用的代码完成/预处理器不知道stdio.h的存在位置。

您需要指定stdio.h所在的文件系统路径。

请参阅:http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_paths.htm

答案 1 :(得分:48)

我发现这些答案(包括接受的答案)有点神秘。

对我来说,我必须添加stdio.h所在的路径(如@ardnew所说)。在Eclipse中,打开项目的Properties,展开“C / C ++ General”并选择“Paths and Symbols”。

确保为您使用的每种语言添加了include目录。 (在我的例子中,我只需要将它添加到GNU C ++中。)

enter image description here

答案 2 :(得分:17)

只是添加到知识库中,我只是在win7上用cygwin做了这个。

这似乎对我有用。

包含c:

的路径
D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include
D:\dev\cygwin\usr\include

包含c ++的路径:

D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include
D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include\c++
D:\dev\cygwin\usr\include

这让我对hello world进行了简洁的编译。

答案 3 :(得分:16)

转到项目&gt;属性&gt; C / C ++一般&gt;预处理器包括&gt;供应商 并选择两个:

  • “CDT GCC内置编译器设置”
  • “CDT CROSS GCC内置编译器设置”

对于其中每一个,还要选择子条目:“使用项目之间共享的全局提供者”。

在Ubuntu 16.04中使用C语言和C ++ hello世界在Eclipse 4.8.0上进行测试。

答案 4 :(得分:10)

  • 选择文件&gt;&gt;新项目
  • 在项目向导中,选择 C / C ++&gt;&gt; C ++项目
  • 在“项目类型”部分,选择“ Makefile项目&gt;&gt; Hello world C ++项目
  • 在“工具链”部分中,选择“ Linux GCC

它可以解决问题。 (请原谅我的英语不好)

答案 5 :(得分:4)

我正在使用Eclipse和Cygwin,这对我有用:

转到项目&gt;属性&gt; C / C ++一般&gt;预处理器包括...&gt;供应商 并选择&#34; CDT GCC内置编译器设置Cygwin [共享]&#34;。

答案 6 :(得分:4)

我正在使用多个交叉编译器配置,我需要为STD头文件(以及其他环境变量)使用不同的位置。

解决方案是设置索引器,以便使用活动配置 不幸的是,由于某些 bug in eclipse ,该选项未存储在本地,因此如果要在打开时保存配置,则必须使用工作区配置再次日食。

窗口 - &gt;偏好 - &gt; C / C ++ - &gt;索引器 - &gt;使用有效的构建配置

这将使eclipse使用通过项目的活动Cross GCC配置设置的正确编译器。

答案 7 :(得分:1)

在ADT中,我做了以下事情:

  1. 右键单击项目并选择“属性”
  2. 展开C / C ++常规并选择预处理器包含路径,宏等。
  3. 选择CDT用户设置条目
  4. 从右侧菜单中选择添加...
  5. 在“添加包含目录中,将项目路径更改为文件系统路径”
  6. 浏览到包含您的包含文件的目录
  7. 根据需要搅拌并重复

答案 8 :(得分:1)

通常,Eclipse应该能够自动解析标​​准包含文件。它通过调用gcc并询问其配置来完成此操作。很可能Eclipse没有找到你的gcc(或者至少不是你用来编译的版本)。

您可能希望确保Eclipse找到gcc,而不是在项目设置中指定所有标准包含路径。在启动Eclipse之前,将找到gcc的目录添加到PATH环境变量中。

如果您希望不同的项目使用不同的编译器,那么您可能需要调整发现选项。这些是默认隐藏的,因此首先从Window&gt;中启用它们。偏好&gt; C / C ++&gt;属性页设置&gt;显示“发现选项”页面。然后你可以在C / C ++ Build&gt;下找到它们。项目属性中的发现选项。

答案 9 :(得分:1)

如前面的答案所示,有必要指定构建文件夹的位置,可以通过右键单击项目到达的对话框添加,然后选择属性 - > C / C ++一般 - &gt;路径和符号。

剩下的问题是需要添加哪些路径。

如果你为命令行访问正确设置了gcc,并且需要知道它使用的默认包含路径是什么,那就问问它;根据您感兴趣的语言,使用:

gcc -x c -v -E /dev/null
gcc -x c++ -v -E /dev/null

...这将列出调用gcc时使用的默认编译器设置(如果“gcc”实际上是clang的别名,则此命令也有效,如OSX上所示)。

  

/dev/null使用空文件 - 我们告诉gcc解析空文件

     

-x <language>指定要编译的语言,因为我们没有使用带有指定语言的扩展名的文件

     

-v详细输出,包括输出包含路径

     

-E只执行预处理,输出预处理文件(这可以防止gcc抱怨空文件无法正确编译)

底部将是包含目录的列表:

#include "..." search starts here:
#include <...> search starts here:
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks (framework directory)
End of search list.

如果按照列出的顺序输入此处列出的目录,进入Eclipse的路径和符号对话框,Eclipse CDT应该能够找到标准的标题,也许还有一些特定于您的操作系统的附加标题。

(感谢devnull's answer对相关问题。)

答案 10 :(得分:1)

我使用基于eclipse的CodeWarrior IDE进行嵌入式项目,我刚刚通过删除并再次添加源地址到Project Properities-&gt; C / C ++ General-&gt; Path and Sybols-&gt;来解决了这个问题。包括目录。这意味着有很多理由采取“未解决的包含:”消息,并且还有很多解决方案。

答案 11 :(得分:0)

我配置路径和符号的错误是我最初配置了不同语言的包含路径。我正在使用CDT和Cygwin gnu C ++。因此,您必须在GNU C ++语言下配置符号和路径。enter image description here

答案 12 :(得分:0)

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

下:

  • 项目
  • 属性
  • C / C ++常规
  • 预处理器包含路径,宏等
  • 提供商
  • CDT GCC内置编译器设置
  • 获取编译器规格的命令

替换:

${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"

具有:

gcc -std=c99 -E -P -v -dD "${INPUTS}"

如果不这样做,则Eclipse stdout将显示:

Unable to find full path for "-E"

,并且${HOME}/eclipse-workspace/.metadata/.log下的日志显示:

!ENTRY org.eclipse.cdt.core 4 0 2020-04-23 20:17:07.288
!MESSAGE Error: Cannot run program "-E": Unknown reason

因为${COMMAND} ${FLAGS}为空,所以Eclipse尝试执行下一个-E

我想知道我们是否可以在设置上正确定义COMMANDFLAGS变量,但是我试图将它们添加为构建变量,但这没有用。

问题的C ++版本:How to solve "Unresolved inclusion: <iostream>" in a C++ file in Eclipse CDT?

在Eclipse 2020-03(4.15.0),Ubuntu 19.10和此minimal Makefile project with existing sources上进行了测试。

答案 13 :(得分:0)

您是否检查它是否从命令行编译? 对于我在Linux上的帮助,请apt安装libc-dev。