我为eclipse设置了CDT并编写了一个简单的hello world C程序:
#include <stdio.h>
int main(void){
puts("Hello, world.");
return 0;
}
该程序正确构建并运行,但当我将鼠标置于其上时,eclipse会在包含语句旁边显示这个黄色问号时显示"Unresolved inclusion: <stdio.h>"
。
它不会影响程序的运行,但我觉得它很烦人。
有没有人知道如何删除它?
答案 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 ++中。)
答案 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;供应商 并选择两个:
对于其中每一个,还要选择子条目:“使用项目之间共享的全局提供者”。
在Ubuntu 16.04中使用C语言和C ++ hello世界在Eclipse 4.8.0上进行测试。
答案 4 :(得分:10)
它可以解决问题。 (请原谅我的英语不好)
答案 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中,我做了以下事情:
答案 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)
答案 12 :(得分:0)
还在Linux上将${COMMAND}
设置为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
。
我想知道我们是否可以在设置上正确定义COMMAND
和FLAGS
变量,但是我试图将它们添加为构建变量,但这没有用。
问题的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。