关于“-Wl,-rpath =”的事情。

时间:2014-04-25 09:05:40

标签: c linux gcc g++ shared-libraries

我已经构建了一个共享库libC.so,它依赖于libA.so和libB.so. 然后我使用libC.so构建test.c,命令:

gcc test.c -o test -fPIC -I./ -L./ -lC

它会输出错误,找不到libA.so和libB.so中的一些符号。 我知道,当我添加标志" -lA -lB"时,可以成功构建。

但是我无法理解,为什么可以通过以下命令成功构建:

gcc test.c -o test -fPIC -I./ -L./ -lC -Wl,-rpath=.

1 个答案:

答案 0 :(得分:0)

我认为您的libA.so和libB.so存在于当前目录中。 您提供链接选项-Wl -rpath作为当前目录。 因此,您的链接器将获取当前目录中的库并链接符号。

由于您指定的链接器选项,它没有给出任何错误。

您可能会得到的下一个疑问是, 我只指定了要搜索的目录,但没有指定指定的库。 链接器如何使用libA.so和libB.so库? 但链接器是智能的,并且它认为您忘记包含这些相互依赖的库(您可能不了解相互依赖性),但您已指定搜索所有依赖库的路径。所以它选择了相互依赖的库。

我认为它仅适用于相互依赖。应该使用-l选项指定所有直接库。