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

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

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

【问题讨论】:

    标签: c gcc linker ld


    【解决方案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”问题:-)
    猜你喜欢
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 2021-12-27
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多