GCC 的“-Wl,option”和“-Xlinker option”语法有区别吗?

Posted

技术标签:

【中文标题】GCC 的“-Wl,option”和“-Xlinker option”语法有区别吗?【英文标题】:Is there a difference between the "-Wl,option" and "-Xlinker option" syntax for GCC? 【发布时间】:2011-11-05 11:23:47 【问题描述】:

我一直在查看一些配置文件,并且看到两者都在使用(尽管在不同的架构上)。如果您在 Linux 机器上使用 GCC,将选项传递给链接器的两种语法有区别吗?

阅读 GCC 手册,据我所知,它们的解释几乎相同。

【问题讨论】:

【参考方案1】:

来自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,选项

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

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

如您所见,唯一的区别是-Wl 允许您通过逗号指定多个参数,例如-Wl,-rpath,/my/libs,而-Xlinker 无法做到这一点;另一方面,-Xlinker 可能更具自我描述性。任你选。还要检查其他编译器(想到nvccclang),看看它们中的任何一个在语法上是否一致,然后如果这对您很重要,则将其用于可移植性。

【讨论】:

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

以上是关于GCC 的“-Wl,option”和“-Xlinker option”语法有区别吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 xlink 的 SVG 在 Firefox 84 中不起作用

SVG xlink:.jpg的href路径无法正常工作(在我的网站项目中)[重复]

是否可以使用 HTML 的 .querySelector() 通过 SVG 中的 xlink 属性进行选择?

使用 angularjs 将 svg 中的 xlink:href 设置为 base64 编码的图像

使用 CSS 设置 svg <image> 元素的 xlink:href 属性

<use> 标签上的 xlink:href 属性在 tsx 文件中使用时会引发打字稿错误