我不明白-Wl,-rpath -Wl,
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我不明白-Wl,-rpath -Wl,相关的知识,希望对你有一定的参考价值。
为方便起见,我在下面添加了相关联机帮助页。
首先我的(误)理解:如果我需要将选项与,
分开,这意味着第二个-Wl
不是另一种选择,因为它来自,
,这意味着它是-rpath
选项的参数。
我不明白-rpath
怎么会有-Wl,.
论点!
在我看来有意义的是:
-Wl,-rpath .
这应该使用当前目录参数调用-rpath链接器选项。
男人gcc:
-Wl,选项
传递选项作为链接器的选项。如果选项包含逗号,则会在逗号中将其拆分为多个选项。您可以使用此语法将参数传递给该选项。例如,
-Wl,-Map,output.map
将-Map output.map
传递给链接器。使用GNU链接器时,您也可以使用`-Wl,-Map = output.map'获得相同的效果。
男子ld:
-rpath = dir
将目录添加到运行时库搜索路径。将ELF可执行文件与共享对象链接时使用此方法。所有-rpath参数都连接在一起并传递给运行时链接程序,后者使用它们在运行时查找共享对象。在定位链接中明确包含的共享对象所需的共享对象时,也会使用-rpath选项;
gcc的-Wl,xxx
选项将逗号分隔的标记列表作为以空格分隔的链接器参数列表。所以
gcc -Wl,aaa,bbb,ccc
最终成为一个链接器调用
ld aaa bbb ccc
在你的情况下,你想说“ld -rpath .
”,所以你把它传递给gcc作为-Wl,-rpath,.
或者,你可以指定-Wl
的重复实例:
gcc -Wl,aaa -Wl,bbb -Wl,ccc
请注意,aaa
和第二个-Wl
之间没有逗号。
或者,在你的情况下,-Wl,-rpath -Wl,.
。
你也可以写
-Wl,-rpath=.
摆脱那个讨厌的空间。它可以说比添加额外的逗号更具可读性(它正是传递给ld的内容)。
另一件事。您可能还需要指定-L选项 - 例如
-Wl,-rpath,/path/to/foo -L/path/to/foo -lbaz
或者你最终会得到一个错误
ld: cannot find -lbaz
手册页非常清楚。如果你想将两个参数(-rpath
和.
)传递给链接器,你可以写
-Wl,-rpath,.
或者
-Wl,-rpath -Wl,.
你建议的-Wl,-rpath .
这个论点对我的想法没有意义。 gcc如何知道你的第二个参数(.
)应该传递给链接器而不是正常解释?它能够知道的唯一方法是,它是否具有所有可能的链接器参数的内幕知识,因此它知道-rpath
需要一个参数。
以上是关于我不明白-Wl,-rpath -Wl,的主要内容,如果未能解决你的问题,请参考以下文章