gcc" -Xlinker"之间的区别和" -Wl,"选项?

时间:2016-07-07 02:33:41

标签: gcc linker gnu ld gas

根据GCC 6.1 manual on Link Options

  

-Wl,选项

     

将选项作为链接器的选项。 如果选项包含逗号,则会在逗号中将其拆分为多个选项。

     

-Xlinker选项

     

将选项作为链接器的选项。 您可以使用它来提供GCC无法识别的系统特定的链接器选项。

为什么我们需要2个?

ADD 1

同样,为什么我们需要-Xassembler-Wa作为汇编程序选项?

引自GCC 6.1 doc on Assembler Options

  

-Wa,选项

     

将选项作为汇编程序的选项。 如果选项包含逗号,则会在逗号中将其拆分为多个选项。

     

-Xassembler选项

     

将选项作为汇编程序的选项。 您可以使用它来提供GCC无法识别的特定于系统的汇编程序选项。

1 个答案:

答案 0 :(得分:1)

差异在于以下粗体文字

  

<强> -Wl,选项

     

传递选项作为链接器的选项。如果选项包含逗号,则会在逗号中将其拆分为多个选项。 您可以使用此语法将参数传递给选项。例如,-Wl,-Map,output.map将-Map output.map传递给链接器。使用GNU链接器时,您也可以使用-Wl,-Map = output.map获得相同的效果。

     

-Xlinker选项

     

传递选项作为链接器的选项。您可以使用它来提供GCC无法识别的特定于系统的链接器选项。   如果要传递一个带有单独参数的选项,则必须使用-Xlinker两次,一次用于选项,一次用于参数。例如,要传递-assert定义,您必须编写-Xlinker -assert -Xlinker定义。它不能用于编写-Xlinker&#34; -assert definitions&#34;,因为这会将整个字符串传递为单个参数,这不是链接器所期望的。

     

使用GNU链接器时,使用option = value语法而不是单独的参数将参数传递给链接器选项通常更方便。例如,您可以指定-Xlinker -Map = output.map而不是-Xlinker -Map -Xlinker output.map。其他链接器可能不支持命令行选项的此语法。

由于背面兼容性,我猜两个类似的功能仍然存在。