armlinker option
一.armlinker 概念1. 链接器根据链接的对象的构建属性,自动选择要链接的相应标准C或C++库变体。链接器可以链接ARM代码、Thumb代码和Thumb-2代码,并自动生成交互操作胶合代码,以便在需要时切换处理器状态。链接器还可以在需要时自动生成内联胶合代码或长跳转胶合代码,以扩展跳转指令的范围。2. 链接器支持的一些命令选项可用于为系统内存映射中的代码和数据指定存放的位置。另外,也可以使用分散加载描述文件,在加载时和执行时指定输出影像中各个代码和数据节在内存中的位置。这样可以创建跨越过个内存的复杂影像。3. 链接器支持读/写数据压缩,以减少输出影像的大小。另外,连接器还可以:· 生成关于链接文件的调试和引用信息· 生成静态调用图并列出其堆栈的使用情况· 控制输出影像中符号表的内容· 显示输出中代码和数据的大小 链接器可提供反馈信息,以便在下次编译文件时提示编译器有未使用的函数。这些函数在后 面的编译中将放在各自所在的节中,以便链接器将来删除它们。4. armlink的输入armlink的输入包括· 一个或多个ELF对象格式的目标文件· 用armar创建的一个或过个库。· 一个符号定义文件5. armlink的输出成功调用armlink后的输出为下列选项之一:· ELF可执行格式的可执行影像· ELF共享对象格式的共享对象· ELF对象格式的部分链接对象· ELF对象格式的可重定位对象对于简单映像,ELF可执行文件包含相当于映像中的RO和RW输出节的段。ELF可执行文件还具有包含映像输出节的ELF节。 Note: 可以使用formelf将ELF可执行格式的可执行映像转换为其他文件格式6. 构造可执行映像· 解析输入目标文件之间的符号引用· 从库中提取对象模块来满足还未满足引用的需要· 根据属性和名称排序输入节,并将属性和名称相似的节合并为相临快· 删除未使用的节和未使用的虚拟函数· 删除重复的公共组合公共代码、数据及调试节· 根据提供的分组信息和定位信息将对象片段组织为内存区· 给可重定位值分配地址· 生成可执行映像7. 构建部分链接对象· 删除重复的调试节副本· 最小化符号表的大小· 将未解析的引用保留为未解析状态· 生成一个对象,将其用作后续链接步骤的输入Note:如果使用部分链接,则不能通过分散加载描述文件中的名称来引用组件对象二.armlink command syntax 根据选项类型而定,可以分为单字母选项和关键字选项(1)单字母选项在所有单字母选项或带参数的单字母选项之前,都有一个单短划线- 。 选项与自变量之间可以使用空格,或者自变量可以紧跟选项之后。例如:- o file(2)关键字选项在所有关键字选项或带参数的关键字选项前面,都有一个双短划线- - 。 例如:- - output fileNote:对于使用括号的命令行参数,在 UNIX 系统上可能需要使用反斜杠 () 字符对括号字符进行转义。获取帮助和信息要获取关于可用命令行选项和工具版本号的信息,请使用:1.- - help 输出一些常用命令行选项的汇总。2.- - vsn 显示链接器版本信息和许可证信息。指定输入文件列表1.input-file-list1>这是以空格分隔的对象、库或符号定义 (symdefs) 文件的列表。链接器将整个输入文件列表按照一定的顺序排列。如果链接器无法解决输入文件问题,则生成诊断消息。可以将 symdefs 文件包括在列表中,为先前生成的映像文件提供全局符号值。2>可以用以下方式来使用输入文件列表中的库:• 指定要添加到库列表中的一个库,用于提取解析了任何未解析的非弱引用的成员。例如,指定输入文件列表中的mystring.lib。note:仅当此列表中的库成员解析了未解析的非弱引用时,才将该列表中的库成员添加到映像中。• 指定从库中提取的特定成员,并将它们作为单个对象添加到映像中。例如,指定输入文件列表中的mystring.lib(strcmp.o)。3>链接器按以下顺序处理输入文件列表:(1) 对象无条件添加到映像中。(2) 使用模式将从库中选择的成员无条件地添加到映像中(如同添加对象一样)。例如,以下命令无条件地添加 mylib 中的所有 a*.o 对象和 stdio.o:armlink main.o mylib(stdio.o) mylib(a*.o)在 UNIX 平台上,可能需要对括号进行转义,例如:armlink main.o mylib(stdio.o)(3) 将标准 C 或 C++ 库添加到库列表中,以后用于解析任何遗留的引用.2.—libpath pathless1>指定用于搜索 ARM 标准 C 和 C++ 库的路径列表。2>包含 ARM 库的父目录的缺省路径由 RVCT31LIB 环境变量指定。此处指定的任何路径都将覆盖由 RVCT31LIB 指定的路径。3>pathlist 是由逗号分隔的路径列表,仅用于搜索所需的 ARM 库。指定多个路径名时,在逗号和路径名之间不要留有空格,例如path1,path2,path3,...,pathn。4>此列表必须以 ARM 库目录 armlib 和 cpplib 的父目录结束。Note:此选项不影响搜索用户库。应改为使用 --userlibpath。3. - - [no_]scanlib启用或禁用扫描缺省库(标准 ARM C 和 C++ 库)以解析引用。- - scanlib 是缺省值。4. - - userlibpath pathlist1>指定用于搜索用户库的路径列表。2>pathlist 是由逗号分隔的路径列表,用于搜索所需的库。指定多个路径名时,在逗号和路径名之间不要留有空格,例如path1,path2,path3,...,pathn。控制链接器行为1- - strict 指示链接器将可能会产生故障的条件报告为错误而不是警告。其中一个条件示例是:从非交互函数获取交互函数的地址。2. - - [no_]strict_relocations- - strict_relocation 指示链接器报告已过时的和不提倡使用的重定位的实例。在链接使用先前版本的 ARM 工具构建的目标文件时,最有可能发生重定位错误和警告。使用此选项可以确保对象的 ABI 兼容性。 缺省情况下关闭该选项,并且链接器在可能时自动处理不提倡使用和已过时的重定位。指定输出类型和输出文件名1.- - output file:指定输出文件的名称。该文件可以是部分链接对象或可执行映像。如果未指定输出文件名,则链接器使用以下缺省名称:Ø __image.axf 如果输出是可执行映像Ø __object.o 如果输出是部分链接对象。如果指定 file 时不带路径信息,则它将在当前工作目录中创建。如果指定了路径信息,则该目录将成为缺省的输出目录。2.- - partial 创建部分链接对象,而不是可执行映像。3- - reloc 创建可重定位的 ELF 映像。可重定位映像有一个包含重定位信息的动态段,可用于在链接后重新定位映像。链接后重定位的示例包括高级 ROM 构建和运行时动态加载。如果映像在链接时的地址加载,则链接器生成的可重定位映像不需要处理重定位,并且映像的调试数据有效。当加载映像的地址与链接时的地址不同时,将会处理重定位,不过映像中现有的任何调试数据都将无效。单独使用时,- - reloc 生成的映像类似于简单类型 1,映像的载入区属性设置为 RELOC。有关详细信息,请参阅第3-24 页的类型 1,一个加载区和几个连续执行区。4- - shared 创建 SVr4 共享对象。5- - sysv 创建可在 ARM Linux 上使用的 SVr4 格式的 ELF 可执行文件。为映像指定内存映射信息1. - - ro-base address将包含 RO 输出节的区的加载地址和执行地址都设置为 address。address 必须是字对齐的。如果未指定此选项,并且没有指定分散加载文件,则缺省 RO 基址为 0x8000。2. - - rw-base addres将包含 RW 输出节的区的执行地址设置为 address。 address 必须是字对齐的。3>- - ropi 使包含 RO 输出节的载入区和执行区与位置无关。如果未使用此选项,则将区标记为绝对地址区。通常每个只读输入节必须为只读的位置无关代码 (ROPI)。如果选择了此选项,则链接器将:• 检查节之间的重定位信息的有效性• 确保 armlink 本身生成的任何代码(如交互操作胶合代码)为只读的位置无关代码。4>- - rwpi 将包含 RW 和 ZI 输出节的载入区和执行区设置为与位置无关。如果未使用此选项,则将区标记为绝对地址区。此选项需要 --rw-base的值。如果未指定 --rw-base,则假定为 --rw-base 0。通常每个可写输入节必须为可读写的位置无关代码 (RWPI)。如果选择了此选项,则链接器将:•检查是否在任何读写执行区的输入节上设置了 PI 属性•检查节之间的重定位信息的有效性•生成与表 Region$$Table 中的静态基址相关的条目。这在复制、解压缩或初始化区时使用。5>- - scatter file使用 file 中包含的分散加载描述来创建映像内存映射。该描述提供映像中各个区和节的分组和布局的详细信息。- - scatter 选项不能与任意内存映射选项:- - partial、- - ro-base、- - rw-base、- - ropi、- - rwpi、- - rosplit 或- - split 结合使用,也不能与 --reloc 或 --startup 结合使用。Not:如果你使用了该选项,你必须自己实现堆和栈初始化函数__user_initial_stackheap()函数.6>- - split :将包含 RO 和 RW 输出节的缺省载入区分成以下载入区:• 一个包含 RO 输出节的区。缺省的加载地址是 0x8000,但可以使用 --ro-base 选项指定其他地址。• 一个包含 RW 和 ZI 输出节的区。使用 --rw-base 选项可指定加载地址。此选项需要 --rw-base 的值。如果未指定 --rw-base,则假定为 --rw-base 0。Note: 两个区都是根区。7>rosplit: 将缺省 RO 载入区分为两个 RO 输出节,一个用于 RO-CODE,另一个用于 RO-DATA。8>- - fpic 可用于链接位置无关代码 (PIC),即使用 /fpic 限定符编译的代码。只有在代码使用 System V 共享库时才执行相对寻址。Note:如果使用了 --shared 但未使用 --fpic,则链接器将输出一个可降级错误。控制调试信息这些选项控制映像中的调试信息1- - debug- - [no_]debug 使用 --debug 在输出文件中包括调试信息。调试信息包括调试输入节以及符号和字符串表。这是缺省设置。使用 --no_debug 从输出文件中排除调试信息。 ELF 映像将变小,但不能在源代码级别对其进行调试。链接器放弃在输入对象和库成员中找到的任何调试输入节,并且不包括映像中的符号和字符串表。仅在载入到调试器时对映像的大小有影响。不影响下载到目标的任何最终二进制映像的大小。如果创建部分链接对象,而不是映像,则链接器放弃在输入对象中找到的调试输入节,但在部分链接对象中生成符号和字符串表。Note:如果需要 fromelf --fieldoffsets 步骤,则不要使用 --no_debug。如果生成的映像没有调试信息,则 fromelf 无法:•将映像转换为其他文件格式•生成有意义的反汇编列表。 2. - - datacompressor on|off缺省情况下,将会启用 RW 数据压缩以便最大程度地减小 ROM 大小。使用 --datacompressor off 可关闭 RW 数据压缩。3- - datacompressor list|id可用于为 RW 数据压缩指定提供的算法之一:• 使用 --datacompressor list 可获取可供链接器使用的数据压缩器的列表。• 如果未指定数据压缩算法,则链接器将自动选择一种最合适的算法。通常不必覆盖此选择。如果要覆盖链接器,请使用 --datacompressor id 指定数据压缩算法。指定压缩器后,便会将解压缩器添加至代码区。如果最终映像没有压缩的数据,则不添加解压缩器。4. - - edit file-list(1)可用于指定控制文件,其中包含用于编辑输出二进制中的符号表的命令。您可以在控制文件中指定命令来:• 隐藏全局符号。 使用此选项可隐藏目标文件中的特定全局符号。隐藏符号不是公共可见的。• 重命名全局符号。 使用此选项可解决符号命名冲突。(2)如果指定多个控制文件,可以使用以下语法之一:armlink --edit file1 --edit file2 --edit file3armlink --edit file1,file2,file3Note:不要在逗号和文件名之间留有空格。5 - -entry location(1)指定映像的唯一初始入口点。一个映像可包含多个入口点,但使用此选项指定的初始入口点存储在可执行文件头中,以供加载程序使用。此选项在命令行中只能使用一次。加载映像时,ARM RealView Debugger使用此入口地址来初始化程序计数器 (PC)。 (2)初始入口点必须满足以下条件:•映像入口点必须在执行区内•执行区必须是非重叠的,而且必须是根执行区(加载地址 ==执行地址)。使用以下一项替换 location:(1)entry_address一个数值,例如:- - entry 0x0(2)symbol 将映像入口点指定为 symbol 的地址,例如:- - entry reset_handler(3)offset+object(section)将映像入口点指定为特定 object 的 section 中的 offset,例如:- - entry 8+startup.o(startupseg)在 --entry 的自变量中不能包含空格。匹配输入节和对象名时不区分大小写。可以使用以下简化表示法:•如果 offset 为零,则使用 object(section)。•如果只有一个输入节,则使用 object。如果 object 中有多个输入节,则 armlink 将生成一则错误消息。Note:如果映像的入口地址在 Thumb 状态下,则地址的最低有效位必须设置为 1。如果指定了符号,则链接器会自动完成此操作。例如,如果入口代码在 Thumb 状态下从地址 0x8000 开始,则必须使用 --entry 0x8001。6 - -first section-id将选定的输入节放到其执行区中的第一个节。例如:可以将包含向量表的节放在映像中的第一个节。使用以下一项替换section-id:1>symbol 选择定义 symbol 的节。 由于只能有一个节放置为第一个节,因此不能指定有多个定义的符号。 例如:- - first reset2>object(section)从object 中选择 section.在 object 和后面的左括号之间不能有空格。 例如:- - first init.o(init)3>object选择 object 中的单个输入节。 使用此短格式时,如果有多个输入节,则 armlink 会生成一则错误消息。 例如:- - first init.oNote:1.使用分散加载时,在分散加载描述文件中使用 +FIRST代替2.两个不同的节,不能一起放到同一个执行区中的首位。因此,该选项只能出现一次。7. - -last section-id(1) 将选定的输入节放置为其执行区中的最后一个节。例如,可以强制将包含校验和的输入节放置为 RW 节中的最后一个节。 (2)使用以下一项替换 section-id:Ø symbol :选择定义 symbol 的节。 由于只能有一个节放置为最后一个节,因此不能指定有多个定义的符号。 例如:- - last checksumØ object(section):从 object 中选择 section。 在 object 和后面的左括号之间不能有空格。 例如:- - last checksum.o(check)Ø object: 选择 object 中的单个输入节.如果 object 中有多个输入节,则 armlink 将生成一则错误消息。Note:1.使用分散加载时,在分散加载描述文件中使用+LAST代替2.两个不同的节,不能一起放到同一个执行区中的末位。因此,该选项只能出现一次。8 - - remove--remove (RO/RW/ZI/DBG)(1)使能从映像中删除未使用的输入节。(2) 如果输入节包含映像入口点(image entry point),或者被已使用节引用,则认为它是已使用节。Note:当使用—remove时,要避免不小心删除reset code或异常处理。可以使用—keep option来识别异常处理段或使用ENTRY 指令来标记他们作为入口点。 (3)可以使用一些段的属性来更精确的控制那些未使用的节被删除。可以使用一个或多个限定词。RO: 去除所有类型为RO的未使用的节RW: 去除所有类型为RW的未使用的节ZI: 去除所有类型为ZI的未使用的节DBG: 去除所有类型为DEBUG的未使用的节这些限定词没有任何顺序,但是必须用括号括起来使用,使用‘/’来分隔他们。(4)默认是 –remove (RO/RW/ZI/DBG)(5)如果没有指定限定词 --remove,则所有未使用的节都被删除等价于 –remove(RO/RW/ZI/DBG).9 - -no_remove在调试时使用 --no_remove 可在最终映像中保留所有输入节(即使它们是未使用的)。10 - -startup symbol(1)该选项使能链接器可以使用带有不同startup符号的C库。如果链接器发现了main()的定义但是没有发现对这个符号的引用或定义,则将这个引用加到symbol。默认情况下,这个符号是__main.11 - -cppinit symbol项使链接器可以使用带有不同初始化符号的备选 C++ 库。 缺省情况下,symbol 设置为:__cpp_initialize__aeabi_12 --fini symbol指定用于为最终化代码定义入口点的符号名。当动态链接器卸载可执行文件或共享对象时,将执行此代码。13 -- init symbol指定用于定义初始化代码的符号名。当动态链接器加载可执行文件或共享对象时,将执行此代码。14 --pad num (1) 可用于设置填充字节的值。(2) 链接器将此值赋给插入载入区或执行区的所有填充字节。(3)num 是一个整数,可以用十六进制格式赋值。 例如,将 num 设置为0xFF 可能会有助于缩短 ROM 编程时间。 如果 num 大于 0xFF,则填充字节将设置为 (char)num。Note:填充只能插入:• 载入区中。 在载入区之间没有填充。• 固定执行区之间(除了强制对齐之外)。 填充不能插入已达到最大长度的载入区,除非其顶部有固定的执行区。• 节之间,以确保它们遵循对齐约束。15 - - soname name指定共享对象运行时名称,该名称由链接到此共享对象的任何对象用作相关性名称。此相关性存储在链接器生成的可执行文件中。16 - - dynamiclinker name指定用于在运行时加载和重定位文件的动态链接器。与共享对象链接时,动态链接器使用存储在可执行文件中的相关性信息来标识要加载的文件。 如果在 ARM Linux 平台上工作,则链接器假定缺省动态链接器为 /lib/ld-linux.so.2。17 - - keep section-id(1)指定删除未使用节时不能删除的输入节(2)section-id自变量的所有形式都可以包含 * 和 ? 通配符。 可以在命令行中指定多个 --keep 选项。(3)使用以下一项替换 section-id:Ø symbol :指定在删除未使用节时保留定义 symbol 的输入节。 如果symbol 存在多个定义,则 armlink 将生成一则错误消息。例如,可以使用 --keep int_handler。要保留定义以 _handler 结尾的符号的所有节,可以使用- - keep *_handler。Ø object(section)指定在删除未使用节时保留 object 中的 section。例如,要保留 vectors.o 对象的 vect 节,请使用:- - keep vectors.o(vect)要保留 vectors.o 对象中节名称的前三个字母是 vec 的所有节,请使用:- - keep vectors.o(vec*)Ø object:指定在删除未使用节时保留 object 中的单个输入节。 如果使用此短格式,但 object 中有多个输入节,则 armlink将生成一则错误消息。例如,您可能使用 --keep dspdata.o。要保留名称以 dsp 开头的每个对象中的单个输入节,请使用 --keep dsp*.o。18. - - [no_]locals(1)使用 --locals 可指示链接器在生成可执行映像时将局部符号添加到输出符号表中。 这是缺省设置。(2)使用 --no_locals 可指示链接器不将局部符号添加到输出符号表中。如果要减小输出符号表的大小,则这是非常有用的优化。产生内存相关信息:这些选项控制如何提取和表述关于映像的信息1.—callgraph:1>创建函数的静态调用图。 这与生成的映像保存在同一目录中。 调用图将为映像中的所有函数提供定义和参考信息。Note:如果链接器要计算函数堆栈的使用情况,则在汇编程序文件中定义的任意函数必须具有合适的 PROC/ENDP 和 FRAME PUSH/POP 指令。2>对于每个函数 func,链接器列出以下内容:· 编译函数的处理器状态(ARM 或 Thumb)· 调用 func 的函数集合· func 调用的函数集合· 映像中使用 func 地址的次数3>此外,调用图将标识以下函数:• 通过交互操作胶合代码调用的函数• 在映像外定义的函数• 允许保持未定义状态的函数(弱引用)。4>静态调用图还提供有关堆栈的使用信息。 其中列出:• 每个函数使用的堆栈帧的大小• 在所有调用序列(即所有非循环函数调用链)中,函数使用的堆栈的最大大小。5>如果有循环,或者链接器在调用链中检测到不带有堆栈大小信息的函数,则将 + Unknown 添加至堆栈使用情况中。 将会添加一条原因以指示堆栈使用情况未知的原因。6>如果没有函数调试帧信息,链接器将报告缺少堆栈帧信息。7>对于间接函数,链接器不能可靠地确定哪个函数发出了间接调用。这可能会影响为调用链计算最大堆栈用量的方式。8>在汇编语言代码中使用帧指令可描述代码使用堆栈的情况。 这些指令确保向调试器提供调试帧信息,以执行堆栈展开或配置报告。2.—feedback file1>生成反馈文件,在下次编译文件时提示编译器有未使用的函数。2>下次编译文件时,使用编译器选项 --feedback file 指定要使用的反馈文件。 未使用函数放置在各自所在的节中,以便链接器可能在未来进行删除。3.—info topics1>输出关于指定主题的信息,其中 topics 是由逗号分隔的主题关键字列表。 主题关键字可以是以下之一:· common: 列出从映像中删除的所有公共节。 使用此选项相当于- - info common,totals。· debug:列出因使用--remove 而从映像中删除的所有被拒绝的输入调试节。 使用此选项相当于 --info debug,totals。· inline: 列出由链接器内联的所有函数以及内联的总数· sizes: 列出映像中每个输入对象和库成员的代码和数据(RO 数据、RW 数据、ZI 数据和调试数据)大小。 使用此选项相当于 --info sizes,totals。· tailreorder: 列出因为使用 --tailreorder 而移动到其目标上方的所有尾调用节· totals: 列出输入对象和库的代码和数据(RO 数据、RW 数据、ZI数据和调试数据)的总大小。· veneers: 列出链接器生成的胶合代码。· unused: 列出因使用 --remove 而从映像中删除的所有未使用节.· Exceptions: 提供异常表生成和优化的信息2>- - info sizes,totals 的输出始终在输入对象和库的总大小中包含填充值。3>如果使用 RW 数据压缩(缺省设置),或已使用 --datacompressor id选项指定了压缩器,则 --info sizes,totals 的输出将在 Grand Totals下方包括一个条目,反映映像的真实大小。Note:列中的关键字之间不允许有空格。4. - - map 创建映像映射。 映射包含映像中每个载入区、执行区和输入节(包括链接器生成的输入节)的地址和大小。5.—symbols:列出链接步骤中使用的每个局部符号和全局符号以及相应的值。Note:这不包括映射符号。 使用 --list_mapping_symbols 可在输出中包括映射符号。6. list_mapping_symbols在 --symbols 生成的输出中包括映射符号。 例如:$a ARM 代码$t Thumb 代码$d 数据。映射符号用于标记 ARM 代码、Thumb 代码和数据之间的转换。7. - - symdefs file:1>从输出映像创建包含全局符号定义的文件。2>缺省情况下,所有全局符号都写入到 symdefs 文件中。 如果名为file 的 symdefs 文件已经存在,则链接器将其输出限制为此文件中已列出的符号。Note:如果不希望出现此行为,请确保在链接步骤之前删除任何现有的symdefs 文件。3>如果指定的 file 不带路径信息,则链接器将在写入输出映像的目录中搜索它。 如果未找到该文件,则在该目录中创建它。4>在与其他映像链接时,可以将符号定义文件用作输入。8. - -xref :列出输入节之间的所有交叉引用9. - -xrefdbg:列出输入调试节之间的所有交叉引用。10. - - xref{from|to} object(section)列出交叉引用:• 从 object 中的输入 section 到其他输入节• 从其他输入节到 object 中的输入 section。如果想知道来自/指向特定输入节的引用,则使用 --xref 链接器选项生成的列表子集会很有用。可以多次使用此选项,列出来自/指向多个输入节的引用。控制链接其诊断消息这些选项控制链接器发出诊断消息的方式1. - -diag_style arm|ide更改警告和错误消息的格式。- - diag_style arm 为缺省值,- - diag_style gnu 与由 gcc 报告的格式相匹配,而 --diag_style ide 与由 Microsoft Visual Studio 报告的格式相匹配。2.- -diag_suppress taglist1>禁用所有具有指定标签的诊断消息。2>此选项需要以逗号分隔的诊断消息编号列表,用于指定要禁止显示的消息。例如,要禁止显示编号为 L6314W 和 L6305W 的警告消息,使用以下命令:armlink --diag_suppress L6314,L6305 ...3.- -diag_warning taglist设置具有指定标签的诊断消息,使其作为警告消息显示,例如,在希望降级错误消息的情况下。此选项需要以逗号分隔的诊断消息编号列表,用于指定要降级的消息。4.- -errors file:1>将诊断消息从标准错误流重定向到 file。2>指定的文件在链接阶段开始时创建。如果已存在同名的文件,则清除它。如果指定 file 时不带路径信息,则将在当前目录中创建该文件。5. - -list file1>将 --info、- - map、- - symbols、--verbose、- - xref、- - xreffrom 和- - xrefto 命令的输出中的诊断消息重定向到 file。 2>输出诊断消息时创建指定的文件。 如果已存在同名的文件,则覆盖它。不过,如果不输出诊断消息,则不创建文件。这种情况下,任何现有的同名文件的内容将保持不变。如果指定的 file 不带路径信息,则将在输出目录(即写入输出映像的目录)中创建该文件。6. - -verbose:1>输出关于链接操作的详细信息,包括所包含的对象和从中提取对象的库。因为此输出通常很长,所以可能需要将此命令与 --list file命令结合使用,将信息重定向到 file。7. - -via file 使用以下选项可以指定包含附加链接器命令行参数的 via 文件:- - via file 从 file 中读取输入文件名和链接器选项的详细列表。可以在链接器命令行中输入多个 --via 选项。 --via 选项也可以包括在 via 文件中。