ZHCU947E June 2015 – January 2023
借助链接器命令文件,您可以将链接器选项和指令放入一个文件中;在经常使用相同的选项和指令调用链接器时,这会很有用。在使用 MEMORY 和 SECTIONS 指令来自定义应用程序时,链接器命令文件也很有用。您必须在命令文件中使用这些指令;不能在命令行中使用它们。
链接器命令文件是包含以下一项或多项的 ASCII 文件:
若要使用命令文件来调用链接器,请输入 cl6x --run_linker 命令,后跟命令文件的名称:
cl6x --run_linker command_filename |
链接器按照遇到输入文件的顺序处理它们。如果链接器将一个文件识别为目标文件,则它会链接该文件。否则,它假定文件是命令文件,并开始从中读取和处理命令。不管使用何种系统,命令文件名都区分大小写。
连接器命令文件 展示了名为 link.cmd 的示例链接器命令文件。
a.c.obj /* 第一个输入文件名 */
b.c.obj /* 第二个输入文件名 */
--output_file=prog.out /* 指定输出文件的选项 */
--map_file=prog.map /* 指定映射文件的选项 */
连接器命令文件 中的示例文件仅包含文件名和选项。(您可以在命令文件中添加注释,使用 /* 和 */ 来分隔。)若要使用这个命令文件来调用链接器,请输入以下命令:
cl6x --run_linker link.cmd
使用命令文件时,可以在命令行中放入其他参数:
cl6x --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,则您可以输入:
cl6x --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
}
有关 MEMORY 指令的更多信息,请参阅GUID-26CC363C-9AAF-4A90-A4B8-BBE51D4B7A7B.html#GUID-26CC363C-9AAF-4A90-A4B8-BBE51D4B7A7B,有关 SECTIONS 指令的更多信息,请参阅GUID-6E6B4A54-DD1F-4CA9-92C1-21E822F3090C.html#GUID-6E6B4A54-DD1F-4CA9-92C1-21E822F3090C。