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
可能更具自我描述性。任你选。还要检查其他编译器(想到nvcc
和clang
),看看它们中的任何一个在语法上是否一致,然后如果这对您很重要,则将其用于可移植性。
【讨论】:
您可以从多个 -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 编码的图像