IAR 中 xcl 及 icf 文件详解 链接器和链接器的配置 2.1 EWARM 4.xx 的链接器 XLINK 及其配置文件.xcl XLINK 链接器可以把 IAR 汇编器或编译器所产生的可重定位的 UBROF 目标文件转换成针对目标处理器的机器码。 XLINK 一般通过外部链接器命令文件(*.xcl) 来配置, 当然也可以在命令行中直接在 xlink 命令之后输入链接选项, 或者也可以在 XLINK_ENVPAR 环境变量中设置链接选项。 下面介绍 XCL 文件中常用的链接选项, 以便在版本迁移之前, 确切地了解 XCL 文件的含义。 2.2 XLINK 选项 下面介绍几个 XCL 文件中常见的链接器配置选项。 更详细的内容请查阅 XLINK 的参考手册:IAR Linker and Library Tools Reference Guide。 ‐D ‐Dsymbol=value 作用: 使用‐D 选项可以定义一些纯粹的符号, 一般用于声明常数。 参数: symbol 是未在其它地方定义过的外部符号, value 是 symbol 所代表的值。 例如: 就定义了 2 个标识了 ROM 起始和结束地址的符号, 这样以后关于 ROM 地址的配置都可以直接使用这 2 个符号, 使得配置文件的可读性增强。 ‐Z ‐Z [@] [(SPLIT‐)type] segments [=|#] range [, range] … 作用: 使用‐Z 命令的目的是规定 segments 在存储空间中占据的位置和区间。 如果链接器发现某个segment 没有使用‐Z, ‐b 或者‐P 中的任何一个命令进行定义, 则会报错。 参数: @ 使用@参数, 表示为 segments 分配空间时不考虑任何已经被使用的地址空间。 这适用于当某些 segments 的地址空间需要发生重叠的情形。 type 参数 type 规定了 segments 的存储类型, 默认为 UNTYPED。表 1 列举了 IAR 的 ARM C/C++编译器所支持的 segments 类型。 ‐Q ‐Q segment = initializer_segment 作用: 自动设置 segment 的拷贝初始化。 链接器会产生一个新的 initializer_segment (如 CODE_ID),其内容与 segment(如 CODE_I) 完全一致。 相关的符号表和调试信息都会和 segment 相关联(如 CODE_I)。 initializer_segment 的内容(通常在 ROM 中) 必须在初始化阶段被复制到segment(通常在 RAM 中)。 ‐c ‐cprocessor 作用: 规定目标处理器的类型。 如‐carm。 .3 EWARM 5.xx 的链接器 ILINK 及其配置文件.icf EWARM 5.xx 中的链接器称为 ILINK。 ILINK 可以从 ELF/DWARF 格式的目标文件中提取代码和数据, 并生成可执行映像。 在 EWARM 4.xx 中, 基本的代码和数据链接单元是 segment, 而对于 ELF/DWARF 格式而言, 基本链接单元是 section。