【问题标题】:Using ldconfig on Linux在 Linux 上使用 ldconfig
【发布时间】:2008-10-03 16:10:35
【问题描述】:

假设我已将库 foo.so.1.1.1 添加到包含在 /etc/ld.so.conf 中的路径中 当我在系统上运行 ldconfig 时,我得到链接 foo.so.1.1 和 foo.so.1 到 foo.so.1.1.1

如何更改行为以同时获取指向 foo.so.1.1.1 的 foo.so 链接?

【问题讨论】:

标签: linux


【解决方案1】:

ldconfig 查看它找到的所有共享对象,以查找 soname。然后,它使用该 soname 作为链接名称创建一个链接。 soname 是库的名称和主要版本是常规的(但远非普遍使用),因此您的库 foo.so.1.1 将具有 foo.so.1 的 soname 并且 ldconfig 将创建一个名为该链接的链接。

运行时系统的任何部分都不会查找或知道关于名称 foo.so 的任何信息。当您将程序链接到库时使用它。除非您还拥有该库的所有其他开发文件(头文件等),否则拥有该链接是没有意义的,因此 ldconfig 自动创建它是没有意义的。而且由于要使用的链接名称只是另一种约定,在这种情况下根本不存储在文件中,因此 ldconfig 无法知道要创建什么名称。

通常这将在 Makefile 的安装目标中手动创建;当为 linux 发行版打包库时,链接通常与头文件一起存在于 -dev 包中。

【讨论】:

    【解决方案2】:

    只需自己制作符号链接:

    ln -s /usr/lib/foo.so.1.1.1 /usr/lib/foo.so
    

    请注意,对于以这种方式使用库的应用程序,它们需要显式链接到未版本化的共享对象。 IE:这是一种完全绕过动态加载器版本匹配系统的机制。

    【讨论】:

    • 这并不完全正确,您不应在链接目标中包含文件夹名称,因为符号链接可能会被复制/重新定位,因此只需运行“ln -s foo.so.1.1.1 /usr /lib/foo.so"
    猜你喜欢
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多