Wind River Workbench 3.3编译C++文件报etoa:4020错误如何解决?
Wind River Workbench 3.3编译C++报
(etoa:4020): identifier "class" is undefined修复方案 问题背景
- 编译环境:Wind River Workbench 3.3
- 已做操作:将全局构建工具切换为C++编译器
- 故障现象:编译C++代码时抛出错误
(etoa:4020): identifier "class" is undefined,调整编译器配置后问题没有解决
根因说明
这个错误本质是出问题的编译单元被按C语言语法规则解析了:C语言本身没有class关键字,解析阶段直接把它判定为未定义标识符。etoa是VxWorks平台自带的目标文件格式转换工具,它报这个错只是传递上游编译阶段的问题,不用在etoa的配置上浪费时间。
排查修复步骤
- 检查源文件后缀和关联规则
所有写了C语法的源文件,要用.cpp、.cxx、.cc这类Workbench默认绑定C编译器的后缀。要是源文件用的是.c后缀,Wind River Workbench 3.3的默认构建规则会强制调用C编译器编译,不管你全局怎么设C编译器都没用。如果不想改文件后缀,就右键点对应源文件,进Properties -> C/C++ Build -> Settings -> Tool Settings,单独给这个文件指定C编译器,再加个编译参数-x c++,强制按C++语法解析文件内容。 - 检查构建配置是否对应
Workbench的构建配置是按Debug、Release、自定义目标平台分开存的,先确认你当前激活用的配置,和你之前改编译器的配置是同一个。打开完整的编译日志,找到报错文件对应的编译命令行,看实际调用的是不是C++编译前端(GCC工具链对应g++、Diab工具链对应dplus),别改了半天配置,实际编译还是调用的C编译器(gcc/cc/dcc)。 - 检查C/C混合编程的兼容逻辑
如果报错位置是在头文件里,看看是不是有纯C写的源文件直接包含了定义C类的头文件。C源码识别不了C的类定义,混编的时候必须用extern "C"把C类的对外接口封装成C能识别的函数声明,再给C文件调用。
内容的提问来源于stack exchange,提问作者朱克斯
相关产品推荐
相关产品推荐

