ZHCUAV7Z september 1995 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
借助链接器命令文件,您可以将链接器选项和指令放入一个文件中;在经常使用相同的选项和指令调用链接器时,这会很有用。在使用 MEMORY 和 SECTIONS 指令来自定义应用程序时,链接器命令文件也很有用。您必须在命令文件中使用这些指令;不能在命令行中使用它们。
链接器命令文件是包含以下一项或多项的 ASCII 文件:
若要使用命令文件来调用链接器,请输入 armcl --run_linker 命令,后跟命令文件的名称:
armcl --run_linker command_filename |
链接器按照遇到输入文件的顺序处理它们。如果链接器将一个文件识别为目标文件,则它会链接该文件。否则,它假定文件是命令文件,并开始从中读取和处理命令。不管使用何种系统,命令文件名都区分大小写。
连接器命令文件 展示了名为 link.cmd 的示例链接器命令文件。
a.c.obj /* 第一个输入文件名 */
b.c.obj /* 第二个输入文件名 */
--output_file=prog.out /* 指定输出文件的选项 */
--map_file=prog.map /* 指定映射文件的选项 */
连接器命令文件 中的示例文件仅包含文件名和选项。(您可以在命令文件中添加注释,使用 /* 和 */ 来分隔。)若要使用这个命令文件来调用链接器,请输入以下命令:
armcl --run_linker link.cmd
使用命令文件时,可以在命令行中放入其他参数:
armcl --run_linker --relocatable link.cmd x.c.obj y.c.obj
链接器在遇到文件名时立即处理命令文件,因此 a.c.obj 和 b.c.obj 在 x.c.obj 和 y.c.obj 之前链接至输出模块。
您可以指定多个命令文件。例如,如果您有一个包含文件名的文件 names.lst,还有另一个包含链接器指令的文件 dir.cmd,则您可以输入:
armcl --run_linker names.lst dir.cmd
一个命令文件可以调用另一个命令文件;这种类型的嵌套限制为 16 级。如果一个命令文件调用另一个命令文件作为输入,则此语句必须是进行调用的命令文件中的最后一个 语句。
除了作为分隔符,空格和空白行在命令文件中没有其他意义。这也适用于命令文件中的链接器指令的格式。带有链接器指令的命令文件 展示了包含链接器指令的命令文件示例。
a.obj b.obj c.obj /* 输入文件名 */
--output_file=prog.out /* 选项 */
--map_file=prog.map
MEMORY /* MEMORY 指令 */
{
FAST_MEM: origin = 0x0100 length = 0x0100
SLOW_MEM: origin = 0x7000 length = 0x1000
}
SECTIONS /* SECTIONS 指令 */
{
.text: > SLOW_MEM
.data: > SLOW_MEM
.bss: > FAST_MEM
}