这两者之间有区别吗-Wl,选项“;及-Xlinker选件“;GCC的语法?

这两者之间有区别吗-Wl,选项“;及-Xlinker选件“;GCC的语法?,c,gcc,linker,ld,C,Gcc,Linker,Ld,我一直在浏览一些配置文件,我看到它们都在使用(尽管在不同的体系结构上)。如果您在Linux机器上使用GCC,那么将选项传递给链接器的两种语法之间是否存在差异 在阅读GCC手册时,据我所知,他们的解释几乎完全相同。来自man GCC: -Xlinker选件 将选项作为选项传递给链接器。您可以使用它来提供GCC不知道如何识别的特定于系统的链接器选项 如果要传递接受单独参数的选项,必须使用-Xlinker两次,一次用于选项,一次用于参数。例如,要传递-assert定义,必须编写-Xlinker-ass

我一直在浏览一些配置文件,我看到它们都在使用(尽管在不同的体系结构上)。如果您在Linux机器上使用GCC,那么将选项传递给链接器的两种语法之间是否存在差异


在阅读GCC手册时,据我所知,他们的解释几乎完全相同。

来自
man 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选项中获得相同的行为,如手册中所述。我读过手册,从中我相信没有什么不同。我想知道的是,除了个人偏好之外,你是否会在野外的代码中看到任何原因(例如,可移植性或一个缺点,等等)。正如我所说,其他编译器可能也支持其中一个选项,但不支持另一个。例如,
nvcc
只接受
-Xlinker
。但这不再是一个纯粹的“gcc”问题:-)