ldconfig 凭什么能重置 so 软链 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zhouyin
V2EX    Linux

ldconfig 凭什么能重置 so 软链

  • nbsp;
  •   zhouyin 2024-09-10 22:44:01 +08:00 via Android 1940 次点击
    这是一个创建于 396 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 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  
       2024-09-11 16:13:41 +08:00
    帮你问下
    `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  
       2024-09-11 16:16:10 +08:00   1
    应该是你的 /usr/local/lib64/ 目录不在 /etc/ld.so.conf 配置里面,ldconfig 就会给 /usr/lib64/ 下面的 libstdc++.so.6.0.13 的生成一个软链接,你可以把 /usr/local/lib64/ 加到配置里面试一下
    pagxir
        3
    pagxir  
       2024-09-15 09:29:16 +08:00 via Android
    软连接乱指会存在潜在的风险隐患,so 指向不受信任的位置可能会权限风险。所以,不能指向不信任的位置也不能指向不受信任用户的文件。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2820 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 13:27 PVG 21:27 LAX 06:27 JFK 09:27
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86