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

bpw*_*621 29 c linker gcc ld

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

Ker*_* SB 36

我真的不知道还有什么可以做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,-Map,output.map将-Map output.map传递给链接器.使用GNU链接器时,您也可以使用-Wl,-Map = output.map获得相同的效果.

您可以这样做,唯一的区别是-Wl允许您通过逗号指定多个参数,例如-Wl,-rpath,/my/libs,您无法做到的-Xlinker; 另一方面,-Xlinker可能更具自我描述性.随便挑选.还要检查其他编译器(nvcc想到,并且clang),看看他们是否同意语法,然后使用它来实现可移植性,如果这对你很重要的话.

  • 您可以从多个 -Xlinker 选项获得相同的行为,如手册中所述。我已经阅读了手册页,我相信没有什么区别。我想知道的是,除了个人喜好之外,是否有任何原因会在野外代码中看到两者(例如,可移植性或一个恶习等)。 (3认同)
  • 嗯,正如我所说,其他编译器也可能支持其中一个选项,但不支持另一个。例如,`nvcc`仅接受`-Xlinker`。但这不再是一个纯粹的“ gcc”问题:-) (3认同)