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

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

#include <stdio.h> int main(void){ puts("Hello, world."); return 0; } 

程序build立并正确运行,但是当我把鼠标放在它上面时,eclipse不断的在包含语句的旁边显示这个黄色的问号,这个语句里写着"Unresolved inclusion: <stdio.h>"

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

有没有人有任何想法如何删除它?

Eclipse正在使用的编译器能够很好地parsing符号,所以代码会很好的编译。

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

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

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

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

对我来说,我必须添加stdio.h所在的path(就像@ardnew所说的那样)。 在Eclipse中,打开项目的属性,展开“C / C ++常规”并select“path和符号”。

确保你已经为你正在使用的每种语言添加了include目录。 (在我的情况下,我需要把它添加到GNU C ++。)

在这里输入图像说明

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

这似乎是为我工作。

包含c:

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

包含c ++的path:

 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 

这让我一个干净的编译你好世界。

转到Project> Properties> C / C ++ General> Preprocessor Includes> Providers并select“CDT GCC内置编译器设置”和“CDT CROSS GCC内置编译器设置”。

  • select文件>>新build项目
  • 在项目向导中,selectC / C ++ >> C ++项目
  • 在“Project type”部分,select“ Makefile Project >> Hello world C ++ Project
  • 在“工具链”部分,select“ Linux GCC

它可以解决这个问题。 (对不起英文不好)

我用Cygwin使用Eclipse,这工作对我来说:

转到Project> Properties> C / C ++ General> Preprocessor Includes …> Providers,然后select“CDT GCC内置编译器设置Cygwin [Shared]”。

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

解决方法是设置索引器,以便使用活动configuration。
不幸的是,由于在Eclipse中的一些错误 ,选项不存储在本地,所以你必须使用工作区configuration,如果你想保存configuration,当你再次打开eclipse。

窗口 – >首选项 – > C / C ++ – >索引器 – >使用主动生成configuration

这将使eclipse使用正确的编译器,这是与项目的活动交叉GCCconfiguration设置。

在ADT中,我做了以下工作:

  1. 右键单击该项目并select属性
  2. 展开C / C ++ General并selectPreprocessor Include Paths,Macros等
  3. selectCDT用户设置条目
  4. 从右侧菜单中select添加…
  5. 在“添加包含目录”中将项目path更改为“文件系统path”
  6. 浏览到包含您的包含文件的目录
  7. 根据需要搅拌并重复

我使用基于Eclipse的CodeWarrior IDE用于embedded式项目,我刚刚通过删除并再次添加源地址到Project Properities-> C / C ++ General-> Path和Sybols-> Include Directories来解决这个问题。 这意味着有很多理由要采取“未解决的包含:”的信息,也有很多解决scheme。

通常情况下,Eclipse应该能够自动parsing标​​准的包含文件。 它通过调用gcc并询问其configuration来完成此操作。 Eclipse很可能没有find你的gcc(或者至less不是你用来编译的版本)。

您可能不希望在项目设置中指定所有标准的包含path,而是要确保Eclipsefindgcc。 在启动Eclipse之前,将发现gcc的目录添加到PATH环境variables中。

如果你想要不同的项目使用不同的编译器,那么你可能想调整发现选项。 这些在默认情况下是隐藏的,所以首先从窗口>首选项> C / C ++>属性页面设置>显示“发现选项”页面启用它们。 然后,您可以在项目属性中的C / C ++ Build> Discovery Options下find它们。

我configurationpath和符号的错误是,最初我configuration了不同语言的包含path。 我正在使用CDT和Cygwin gnu C ++。 所以你必须在GNU C ++语言下configuration符号和path。 在这里输入图像说明

作为(当前)顶部的答案笔记,有必要指定构build文件夹所在的位置,可以通过右键单击项目,然后select属性 – > C / C ++常规 – >path和符号达到的对话框添加。

剩下的问题是需要添加什么path。

如果你正在交叉编译或做一些奇特的事情,你可能知道你需要什么path,以什么顺序(或者应该看看你的编译器和/或其他依赖关系的文档)。

对于那些寻求基础知识的人:如果你有正确的gcc设置命令行访问,并需要知道它使用的默认包含path是什么,只要问。

根据您感兴趣的语言,使用:

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

…这将列出调用gcc时使用的默认编译器设置(如果“gcc”实际上是clang的别名,则该命令也可以使用,就像在OSX上一样)。

在Windows上,注意/dev/null只是一个简单的空白input文件(不必创build一个)。

向下将是包含目录的列表:

 #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. 

如果您按照列出的顺序将这里列出的目录input到Eclipse的path和符号对话框中,那么Eclipse CDT应该能够find标准头文件,并且可能find一些特定于您的操作系统的额外头文件。

(感谢devnull对相关问题的回答 )