【问题标题】:Linking against a versioned .so without SONAME链接到没有 SONAME 的版本化 .so
【发布时间】:2014-11-02 12:09:20
【问题描述】:

我有一个封闭源代码库,它位于一个名为 libfoo.so.1.2.3.4 的文件中。 objdump -p 表明它没有 SONAME 但确实有 RPATH=/usr/local/lib。

这是一种不好的做法吗?我应该尝试推动图书馆作者更改选项吗?

我应该如何链接我的代码?我不想更改任何系统范围的配置或污染只能由 root 写入的目录。

我创建了一个带有空main() 的虚拟a.c 文件,并尝试与gcc a.c -L. -lfoo 链接。它失败。如果我手动创建libfoo.so -> libfoo.1.2.3.4.so 符号链接并设置export LD_LIBRARY_PATH=$(pwd) 它可以工作并且ldd 说libfoo.so => {correct path}。

所以它有点工作,但这是推荐的方式吗?

【问题讨论】:

    标签: gcc shared-libraries symlink elf


    【解决方案1】:

    这是一种不好的做法吗?

    不是单独的,不。但是,库作者很可能一无所知,尤其是如果您按照他们的安装过程,并以libfoo.so.1.2.3.4 结尾,但没有符号链接。

    我应该尝试推动图书馆作者更改选项吗?

    可能。不设置SONAME 和设置RPATH 本身还不错,但不提供符号链接肯定是。

    设置export LD_LIBRARY_PATH=$(pwd)

    这通常是个坏主意。您应该更喜欢将正确的RPATH 编码到使用该库的二进制文件中(仅 二进制文件)。在 Linux 上,您可以使用 -Wl,--rpath=$(pwd) 来实现。

    【讨论】:

      猜你喜欢
      • 2011-05-03
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      相关资源
      最近更新 更多