【问题标题】:Something about "-Wl,-rpath=."关于“-Wl,-rpath=”的一些东西。
【发布时间】:2014-04-25 09:05:39
【问题描述】:

我已经建立了一个共享库 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”时,可以成功构建 tt。

但是我不明白,为什么可以通过以下命令构建成功:

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

【问题讨论】:

  • 抱歉这个愚蠢的问题。
  • 男人 ld。 ...在定位明确包含在链接中的共享对象所需的共享对象时,也使用 -rpath 选项;...

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    相关资源
    最近更新 更多