对于ARM Windows GCC工具链,Eclipse无法识别stdint.h中的类型

时间:2012-07-26 09:16:28

标签: gcc eclipse-cdt

我将Eclipse Juno for C / C ++开发人员与http://sourceforge.net/projects/gnuarmeclipse中的GNU ARM C / C ++开发支持插件一起安装。

在我的项目中,我使用的uint_32tint16_tuint8_t等类型通常来自stdint.h。虽然我强制Eclipse通过直接指向include目录所在的目录来查看编译器的标准头文件,但是提到的类型没有得到解决。这给了我很多关于未解析符号的红色标记,并且在使用这些类型声明的函数的代码完成时遇到了一些问题。

同样的问题是像 GNUC 这样的标准宏定义 - 通常CDT会看到这些用于GNU C或GNU C ++,但工具链设置为ARM Windows GCC却没有。奇怪。

我可以做些什么来解决这个问题并返回Eclipse提供的主要提升效率?

7 个答案:

答案 0 :(得分:8)

我想我找到了解决问题的方法。问题是 CDT GCC内置编译器设置提供程序,它试图运行gcc而不是arm-elf-gcc。我在字段Command to get compiler specs:¹中添加了前缀,以便通过其正确的名称调用编译器。

瞧,所有未解决的符号都消失了。

不幸的是,我通过更改工具链来破坏我的项目(如果安装了GNU ARM Eclipse插件,就不要这样做了!)但这是另一个故事。


¹ - 位于Project Properties > C/C++ General > Preprocessor Include Paths, Macros etc.下方,标签Providers;必须禁用Share settings entries between projects (global provider)才能编辑该字段。

答案 1 :(得分:1)

请注意,GNU ARM Eclipse插件已于2013年10月更新,新版本更好地支持路径发现,因此不太可能发生此问题。

还修改了工具链。

答案 2 :(得分:1)

如果您使用的是外部Makefile,则Eclipse无法知道目标平台的标准库位于何处。我发现的解决方案是将库包含路径添加到

Project->Preferences->C++ General->Paths and symbols

答案 3 :(得分:1)

我遇到了同样的问题,this page的解决方案有助于解决问题:

  • 输入项目属性 - > C / C ++ - >预处理器包括路径等 - >提供者
  • 点击CDT GCC Build Output Parser并将编译器命令模式从(gcc)|([gc]++)|(clang)更改为(arm-none-eabi-gcc)|([gc]++)|(clang)
  • 点击“应用按钮”
  • 点击CDT内置编译器设置跨ARM并将${COMMAND}替换为arm-none-eabi-gcc
  • 点击“应用”按钮。

答案 4 :(得分:1)

Project > Properties > C/C++ General > Preprocessor Include Paths > Providers

  • 启用CDT GCC Built-in Compiler Settings Cross ARM

  • Command to get compiler specs设置为:

    arm-none-eabi-g++ ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD "${INPUTS}".C
    
    • 最重要的部分是.C。这通常取决于语言。小.c用于C代码,而大C用于C ++。但是在使用外部makefile或设置no toolchain选项时没有指定语言。
  • 另外,检查Allocate console in the Console View以检查命令是否正常运行并且变量正在被正确替换。

  • 启用CDT GCC Build Output Parser并将编译器命令模式从(gcc)|([gc]\+\+)|(clang)更改为(.*g++)|(.*gcc)|(.*[gc]\+\+),然后应用更改。使用Move up/down按钮将其移至CDT GCC Built-in Compiler Settings Cross ARM

  • 上方

您还需要将Project > Properties > C/C++ General > Preprocessor Include Paths > Entries > CDT User Settings Entries设置为以下内容:

cdt user settings entries

Preferences > String Substitutions中,您需要为指向您工具链主页的gnu-arm-path创建一个var。

理想情况下,这些应该在CDT GCC Built-in Compiler Settings Cross ARM中找到,但就我而言,它们不是。{1}}。我认为这与在托管项目中这些条目与每种语言相关联的事实有关。但是使用外部makefile,语言列表框只显示[Unspecified]

Eclipse扫描程序提供程序系统似乎是围绕CDT托管项目设计的,这使得在使用外部makefile时工作变得有点棘手。

您可以使用外部makefile创建新的托管项目,并查看扫描仪发现控制台以查看它应该如何工作。这就是我所做的。

答案 5 :(得分:0)

就我而言,问题是PATH没有定向到编译器。因此,我在变量中添加了C:\Program Files (x86)\GNU Tools ARM Embedded\7 2017-q4-major\bin,它可以正常工作。 需要说明的是:我们有一个约定,我们使用变量GCCPATH指向编译器。

答案 6 :(得分:0)

查看“项目”->“ C / C ++索引”->“刷新所有文件”是否有帮助。