我将Eclipse Juno for C / C ++开发人员与http://sourceforge.net/projects/gnuarmeclipse中的GNU ARM C / C ++开发支持插件一起安装。
在我的项目中,我使用的uint_32t
,int16_t
和uint8_t
等类型通常来自stdint.h
。虽然我强制Eclipse通过直接指向include
目录所在的目录来查看编译器的标准头文件,但是提到的类型没有得到解决。这给了我很多关于未解析符号的红色标记,并且在使用这些类型声明的函数的代码完成时遇到了一些问题。
同样的问题是像 GNUC 这样的标准宏定义 - 通常CDT会看到这些用于GNU C或GNU C ++,但工具链设置为ARM Windows GCC却没有。奇怪。
我可以做些什么来解决这个问题并返回Eclipse提供的主要提升效率?
答案 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的解决方案有助于解决问题:
(gcc)|([gc]++)|(clang)
更改为(arm-none-eabi-gcc)|([gc]++)|(clang)
${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
设置为以下内容:
在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 ++索引”->“刷新所有文件”是否有帮助。