V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zhouyin
V2EX  ›  Linux

ldconfig 凭什么能重置 so 软链

  •  
  •   zhouyin · 107 天前 via Android · 1539 次点击
    这是一个创建于 107 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 CentOS6 老机器上编译 GCC5.1

    把生成的/usr/local/lib64/libstdc++.so.6.0.18 软链到/usr/lib64/libstdc++.so.6

    这样 cmake 命令就能使用它

    但执行 ldconfig 软链重指向了同目录下的 libstdc++.so.6.0.13 这文件属于 gcc4.4 的

    什么原因? ldconfig 配置文件有这么具体规定 so 文件指向?
    3 条回复    2024-09-15 09:29:16 +08:00
    bbsingao
        1
    bbsingao  
       106 天前
    帮你问下
    `ldconfig` 是 Linux 系统中的一个重要工具,用于管理共享库的符号链接( soft link )以及生成共享库的缓存。它之所以能够重置 `.so` 文件的软链接,是因为它是专门用于配置共享库搜索路径和维护相关符号链接的工具。以下是 `ldconfig` 能重置 `.so` 软链接的原因和原理:

    ### `ldconfig` 的功能
    1. **扫描共享库路径**:`ldconfig` 会根据 `/etc/ld.so.conf` 文件中列出的目录(以及默认的 `/lib` 和 `/usr/lib` 等路径)来扫描系统中的共享库。

    2. **维护符号链接**:当系统中存在多个不同版本的共享库时,比如 `libxyz.so.1.0` 和 `libxyz.so.2.0`,通常会有一个指向这些库的符号链接,如 `libxyz.so`。这个链接指向的是具体的某个版本(比如 `libxyz.so.2.0`)。`ldconfig` 会根据库文件名和版本号,自动创建或重置这些符号链接,以确保系统加载的是正确的库版本。

    3. **生成缓存**:`ldconfig` 还会生成或更新 `/etc/ld.so.cache` 文件,该文件是共享库的缓存,包含共享库的路径和文件名,以便系统在运行程序时能够快速查找到所需的库文件。

    ### `.so` 软链接重置的原理
    当你安装新的共享库或者更新了现有的库,系统中可能会存在多个版本的库文件,比如:
    - `/usr/lib/libxyz.so.1`
    - `/usr/lib/libxyz.so.2`

    在这种情况下,`ldconfig` 会自动为这些文件创建或更新符号链接,例如:
    - `/usr/lib/libxyz.so -> libxyz.so.2`

    这意味着当程序需要链接 `libxyz.so` 时,系统实际上会加载 `libxyz.so.2`。如果你手动更改或删除了这个软链接,下一次运行 `ldconfig` 时,它会根据最新的库文件重新生成正确的符号链接。

    ### 为什么 `ldconfig` 能重置软链接
    1. **标准行为**:`ldconfig` 的一个核心职责就是维护共享库的符号链接。为了确保系统能找到正确的库文件,它会自动重置和更新这些链接。这是系统正常运行所需的标准行为。

    2. **版本控制**:通过符号链接的重置,`ldconfig` 能够确保系统加载到的是最新或特定版本的共享库,避免加载到旧版本或不兼容的库。

    3. **系统完整性**:符号链接的重置确保了共享库的路径和链接正确性,防止因为手动修改或意外损坏导致的库加载失败。

    ### 总结
    `ldconfig` 能够重置 `.so` 软链接的原因在于它专门用于管理共享库的路径、缓存和符号链接。它通过扫描共享库的目录,根据库的版本号和命名规则自动更新或重置软链接,确保系统能正确加载到所需的库文件。
    f1ush
        2
    f1ush  
       106 天前   ❤️ 1
    应该是你的 /usr/local/lib64/ 目录不在 /etc/ld.so.conf 配置里面,ldconfig 就会给 /usr/lib64/ 下面的 libstdc++.so.6.0.13 的生成一个软链接,你可以把 /usr/local/lib64/ 加到配置里面试一下
    pagxir
        3
    pagxir  
       102 天前 via Android
    软连接乱指会存在潜在的风险隐患,so 指向不受信任的位置可能会权限风险。所以,不能指向不信任的位置也不能指向不受信任用户的文件。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2446 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 16:06 · PVG 00:06 · LAX 08:06 · JFK 11:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.