gcc的“-Wl,option”和“-Xlinker option”语法之间的任何区别

时间:2011-08-28 13:05:15

标签: c gcc linker ld

我一直在查看一些配置文件,我看到它们都被使用(虽然在不同的架构上)。如果你在linux盒子上使用gcc,那么将选项传递给链接器的两种语法之间有什么区别吗?阅读gcc手册,就我所知,它们几乎完全相同。

1 个答案:

答案 0 :(得分:32)

我真的不知道还有什么要比查找man gcc,你应该记住以后有关gcc调用的问题。所以:

  

-Xlinker选项

     
    

传递选项作为链接器的选项。您可以使用它来提供GCC不知道如何识别的特定于系统的链接器选项。

         

如果要传递一个带有单独参数的选项,则必须使用-Xlinker两次,一次用于选项,一次用于参数。例如,要传递-assert定义,必须编写-Xlinker -assert -Xlinker定义。编写-Xlinker“-assert definitions”不起作用,因为它将整个字符串作为单个参数传递,这不是链接器所期望的。

         

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

  
     

-Wl,选项

     
    

传递选项作为链接器的选项。如果选项包含逗号,则会在逗号中将其拆分为多个选项。您可以使用此语法将参数传递给选项。

         

例如,-Wl,-Map,output.map将-Map output.map传递给链接器。使用GNU链接器时,您也可以使用-Wl,-Map = output.map获得相同的效果。

  

正如你可以看到的,唯一的区别是-Wl允许你通过逗号来指定多个参数,例如-Wl,-rpath,/my/libs-Xlinker无法做到这一点。另一方面,-Xlinker可能更具自我描述性。随便挑选。还要检查其他编译器(nvcc)和clang),看看他们是否对语法达成一致,然后将其用于可移植性(如果这对您很重要)。