背景
- 在代码集成的过程中,会报标题的错。一天同事问我为什么会在编译快结束的时候才报出这些不能解析的变量?,是不是只有这些变量无法解析,解决完这些后会不会再报出很多?
- 经验告诉我这些就是全量的未解析变量了,解决完就结束了。至于为什么我也不知道,所以特地花时间了解了下。
问题背景
- 当软件版本所处阶段高于实车版本,此时就需要对软件版本进行低版本适配。
- 最新软件接口架构相较于低阶段的软件接口发生变动,在进行高阶段代码适配低阶段基底工程(区域控制器中其他部分已经定点的工程)
- 模块接口的变动,就会导致最终集成的时候暴露出不能解析变量的错误(主要错误)
代码集成
常见错误类型
- 部分模块代码未及时更新对全局的依赖文件(公共的标定量和宏)出错
- 新增、修改的接口,编译过程无法解析变量(Rte_Read 和 Rte_Write)
编译过程
- 预处理:解析c代码中的#include、#define、#if 生成中间文件(.i)
- 编译:将中间文件转换为汇编文件,并且进行语法和语义错误
- 汇编:汇编文件转换为机器码的目标文件
- 链接:将目标文件和库文件组合成可执行文件
备注:编译器负责1,2,3;链接器负责4
各自职责
- 编译器:1.预处理;2.词法分析、语法分析、语义分析、中间代码、代码优化、目标代码生成(机器指令和汇编指令);3.汇编
- 链接器:1.解析符号引用;2.替换占位符;3.组织地址空间;4.处理命名冲突;5.生成可执行文件