Gcc 我不知道';我不明白-Wl,-rpath-Wl,

Gcc 我不知道';我不明白-Wl,-rpath-Wl,,gcc,ld,rpath,Gcc,Ld,Rpath,为了方便起见,我在下面添加了相关的手册页 我的(错误)理解第一:如果我需要用,分隔选项,这意味着第二个-Wl不是另一个选项,因为它位于,之前,这意味着它是-rpath选项的参数 我不明白-rpath怎么会有-Wl、.参数 在我看来有意义的是: -Wl,-rpath . 这应该使用当前目录参数调用-rpath链接器选项 曼恩: -选择权 将选项作为选项传递给 连接器如果选项包含逗号,则表示 同时被拆分为多个选项 逗号。您可以使用此语法来 将参数传递给选项。对于 例如,-Wl,-Map,outp

为了方便起见,我在下面添加了相关的手册页

我的(错误)理解第一:如果我需要用
分隔选项,这意味着第二个
-Wl
不是另一个选项,因为它位于
之前,这意味着它是
-rpath
选项的参数

我不明白
-rpath
怎么会有
-Wl、.
参数

在我看来有意义的是:

-Wl,-rpath .
这应该使用当前目录参数调用
-rpath
链接器选项


曼恩:

-选择权

将选项作为选项传递给 连接器如果选项包含逗号,则表示 同时被拆分为多个选项 逗号。您可以使用此语法来 将参数传递给选项。对于 例如,
-Wl,-Map,output.Map
传递
-Map output.Map
到链接器。什么时候 使用GNU链接器,您还可以 同样的效果 `-Wl,-Map=output.Map'

劳工处:

-rpath=dir

将目录添加到 运行库搜索路径。这是 链接ELF可执行文件时使用 使用共享对象。全路径 参数被连接并传递 到使用它们的运行时链接器 在运行时查找共享对象。 -rpath选项也用于以下情况: 查找共享的对象,这些对象是 共享对象显式地需要 包括在链接中


gcc
-Wl,xxx
选项将逗号分隔的标记列表作为空格分隔的参数列表传递给链接器。所以

gcc -Wl,aaa,bbb,ccc
最终成为一个链接器调用

ld aaa bbb ccc
在您的情况下,您希望说“
ld-rpath.
”,因此您将其作为
-Wl,-rpath,.
传递给gcc。或者,您可以指定
-Wl
的重复实例:

gcc -Wl,aaa -Wl,bbb -Wl,ccc
请注意,
aaa
和第二个
-Wl
之间没有逗号


或者,在您的例子中,
-Wl,-rpath-Wl,。

手册页非常清楚。如果要将两个参数(
-rpath
)传递给链接器,可以编写

-Wl,-rpath,.
或者

-Wl,-rpath -Wl,.

你建议的参数
-Wl,-rpath.
对我来说没有意义。gcc如何知道您的第二个参数(
)应该传递给链接器,而不是正常解释?它能够知道这一点的唯一方法是,如果它知道所有可能的链接器参数的内幕信息,那么它就知道
-rpath
需要一个参数。您可能还需要指定-L选项-eg

或者,您可能会出现如下错误

ld: cannot find -lbaz
你也可以写

-Wl,-rpath=.

摆脱那讨厌的空间。可以说,它比添加额外的逗号更具可读性(这正是传递给ld的内容)。

哦,我现在明白了,在将内容传递给链接器时,选项和参数之间没有区别,它只是一个字符串。所以第二个Wl是多余的!谢谢:)@Blub:这不是多余的!这是另一种形式,你要么说
-Wl,-rpath,.
,要么说
-Wl,-rpath-Wl,.
。正是这两个选项中的一个,您不能忽略任何内容。是否有人成功地在OS X上设置了rpath,即使用clang&ld64?@Hintron:是,或
-Wl,-rpath,dir1,-rpath,dir2
,或
-Wl,-rpath=dir1,-rpath=dir2
。以防万一,其他人会像我刚才那样浪费几分钟弄明白这一点,
-W
后面的字符是小写的“L”,而不是数字“1”!啊!gcc分析参数是不可想象的,如果某个参数没有意义,它会自动分组。@Blub如果
gcc
的一个无意义的参数,那么这个(9岁)的参数会有意义。但事实并非如此,您可以将
作为参数传递给GCC本身,这有各种各样的正当理由。这就是为什么,除非它前面带有
-Wl、
重定向标志,否则
(或任何其他参数)不会作为链接器命令行的一部分包含在内,因为在没有显式
-Wl、
或其他子命令重定向的情况下,自然地,
gcc
将默认使用每个参数本身。标题不是在结尾缺少点字符吗?是的,我怀疑SO软件可能已经从
-Wl,option
下删除了它:“当使用GNU链接器时,你也可以使用-Wl,-Map=output.Map获得相同的效果。”对我来说,这似乎表明,如果使用GNU链接器以外的链接器,
=
语法可能不受支持。
-Wl,-rpath=.