7

我最近从 Eclipse 3.6 更改为 Eclipse 3.7 ,我在 Ubuntu 11.04 中用于 C++ 开发。

使用 3.6 版时,我没有遇到什么大麻烦,只是索引器总是有一些问题。现在在 3.7 版中,它开始将未解决的类型标记为错误。由于索引器似乎更不喜欢我,我的 Eclipse 显然不知道类似uint16_tor的类型size_t

与代码编辑器中显示的错误相反,我的编译器在编译代码和解析所有符号和类型方面没有问题,所以这似乎是 IDE 本身的问题。

有什么方法可以避免这种行为,因为所有的红色下划线使我的代码越来越不可读......?

更新:

好的,通过一些研究和丹尼斯的回答,我发现我需要添加一些路径 Project Properties/ C/C++ General/ Paths and Symbols

因为我正在为 PowerPC 而不是 I32 目标构建,所以我不能只添加/usr/include. 相反,我需要添加

/usr/powerpc-linux-gnu/libc/usr/include

对于所有标准标题(如stdint.h)。我还需要:

/usr/lib/gcc/powerpc-linux-gnu/4.5.1/include

对于stdarg.h.

现在几乎所有的错误都消失了。唯一仍然困扰我的功能是printf来自 header stdio.h。我查了一下,头文件本身位于包含的路径中。我仍然收到一个错误,上面写着Function printf could not be resolved。我想再次指出,这些只是 Eclipse 显示的错误 - 编译本身工作正常。

所以这实际上引发了3个问题:

  1. 在项目属性中,该Paths and Symbols部分与该部分的包含路径相一致C++ Build/Settings/C++ Includes。这意味着在其中一个部分中添加/删除路径会直接影响其他部分的条目。由于C++ Includes直接与编译器相一致,我想知道为什么编译器可以正确编译(并找到标头),即使它们没有作为路径传递给他?是否有某种我不知道的 GCC 使用的标准路径?

  2. 为什么他printf在日食中找不到?包含头文件stdio.h,它还包含声明printf- 那么为什么 Eclipse 代码编辑器告诉我它无法解析呢?

  3. 为什么头文件分得这么多?我知道如果我正在为另一个 traget(例如 PowerPC)构建我需要其他头文件 - 但是为什么 GNU GCC 将这些头文件分隔在不同的目录中?

4

3 回答 3

3

常见类型的红色下划线通常是由于包含路径中没有标准库引起的。查看项目的包含...它们在项目属性中。确保您的 C++ 包含的条目与您正在使用的编译器的 C++ 标准库文件夹相匹配。

于 2012-07-10T13:19:36.040 回答
3

在遇到这个问题并且搜索显示两个堆栈溢出问题遇到相同的问题之后,我想我会提交我如何修复它,因为它让我非常恼火以至于无法进行实际调查。

我正在运行 Fedora,令人讨厌的是,它在 /usr/include/linux.... 中有一个 stddef.h 文件,它实际上是空的。因此,即使我在包含路径中有编译器的 stddef.h,索引器实际上也在解析另一个空文件。所以需要做的是:

使用编译器特定的包含路径(在我的情况下是 /usr/lib/gcc/x86_64-redhat-linux/4.7.2/include/)为您的路径和符号列表添加前缀,以避免解析其他空的 stddef.h。

于 2013-06-24T17:48:33.477 回答
0

我正在使用带有 ARM 编译器(arm-none-eabi,4.4.1)的 Eclipse(Mars.1 Release 4.5.1,Build id:20150924-1200)。我和你有完全一样的问题。我以前的路径是:

D:\test\CodeSourcery\Sourcery G++ Lite\lib\gcc\arm-none-eabi\4.4.1\include

然后我在编译器目录中发现了另一个包含目录(后缀:'fixed'):

D:\test\CodeSourcery\Sourcery G++ Lite\lib\gcc\arm-none-eabi\4.4.1\include-fixed

这解决了我关于类型错误检测的所有错误(例如 uint16_t)。

于 2016-04-14T16:08:29.157 回答