【发布时间】:2011-11-05 11:23:47
【问题描述】:
我一直在查看一些配置文件,并且看到两者都在使用(尽管在不同的架构上)。如果您在 Linux 机器上使用 GCC,将选项传递给链接器的两种语法有区别吗?
阅读 GCC 手册,据我所知,它们的解释几乎相同。
【问题讨论】:
我一直在查看一些配置文件,并且看到两者都在使用(尽管在不同的架构上)。如果您在 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,选项
将选项作为选项传递给链接器。如果选项包含逗号,则在逗号处将其拆分为多个选项。您可以使用此语法将参数传递给选项。
例如,-Wl,-Map,output.map 将 -Map output.map 传递给链接器。使用 GNU 链接器时,您也可以使用 -Wl,-Map=output.map 获得相同的效果。
如您所见,唯一的区别是-Wl 允许您通过逗号指定多个参数,例如-Wl,-rpath,/my/libs,而-Xlinker 无法做到这一点;另一方面,-Xlinker 可能更具自我描述性。任你选。还要检查其他编译器(想到nvcc 和clang),看看它们中的任何一个在语法上是否一致,然后如果这对您很重要,则将其用于可移植性。
【讨论】:
nvcc 只接受 -Xlinker。但这不再是一个纯粹的“gcc”问题:-)