【问题标题】:Difference between gcc "-Xlinker" and "-Wl," options?gcc“-Xlinker”和“-Wl”选项之间的区别?
【发布时间】:2016-11-09 06:12:00
【问题描述】:
根据GCC 6.1 manual on Link Options:
-Wl,选项
将选项作为选项传递给链接器。如果选项包含逗号,则在逗号处将其拆分为多个选项。
-Xlinker 选项
将选项作为选项传递给链接器。您可以使用它来提供 GCC 无法识别的特定于系统的链接器选项。
为什么我们需要 2 个?
添加 1
同样,为什么我们需要 -Xassembler 和 -Wa 来提供汇编程序选项?
引用GCC 6.1 doc on Assembler Options:
-Wa,选项
将选项作为选项传递给汇编程序。如果选项包含逗号,则在逗号处将其拆分为多个选项。
-Xassembler 选项
将选项作为选项传递给汇编器。您可以使用它来提供 GCC 无法识别的特定于系统的汇编器选项。
【问题讨论】:
标签:
gcc
linker
gnu
ld
gnu-assembler
【解决方案1】:
区别在于下面的粗体字
-Wl,选项
将选项作为选项传递给链接器。如果 option 包含逗号,则在逗号处将其拆分为多个选项。 您可以使用此语法将参数传递给选项。 例如,-Wl,-Map,output.map 将 -Map output.map 传递给链接器。使用 GNU 链接器时,您也可以使用 -Wl,-Map=output.map 获得相同的效果。
-Xlinker 选项
将选项作为选项传递给链接器。您可以使用它来提供 GCC 无法识别的特定于系统的链接器选项。
如果要传递带有单独参数的选项,则必须使用 -Xlinker 两次,一次用于选项,一次用于参数。例如,要传递 -assert 定义,您必须编写 -Xlinker -assert -Xlinker 定义。 编写 -Xlinker“-assert 定义”是行不通的,因为这会将整个字符串作为单个参数传递,这不是链接器所期望的。
使用 GNU 链接器时,使用 option=value 语法将参数传递给链接器选项通常比单独的参数更方便。例如,您可以指定 -Xlinker -Map=output.map 而不是 -Xlinker -Map -Xlinker output.map。其他链接器可能不支持命令行选项的这种语法。
由于向后兼容性,我猜还有 2 个类似的功能。