You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何自定义glibc的ld-linux-x86-64.so.2链接到非预期的/lib64路径?

现象解释

这是ldd工具的实现机制导致的输出假象,并不代表程序实际运行时会使用系统原生的动态链接器,具体原因如下:

  • ldd本质是shell脚本,工作原理是设置LD_TRACE_LOADED_OBJECTS=1环境变量后,调用系统默认的动态链接器(/lib64/ld-linux-x86-64.so.2)加载目标可执行文件,输出依赖解析结果。
  • 程序实际运行时,内核会直接读取可执行文件INTERP段中你编译时指定的/root/tools/lib/ld-linux-x86-64.so.2路径,直接加载该自定义动态链接器作为程序的加载器,不会触发额外的依赖解析。
  • ldd输出中显示的/root/tools/lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2,是系统原生动态链接器把程序INTERP段指定的加载器当成普通共享库解析的结果:系统原生ld的默认搜索路径优先级高于自定义路径,因此匹配到了系统路径下的同名so。

验证方法

  1. 读取可执行文件的段信息确认内置的加载器路径,输出结果和你编译时指定的路径完全一致:
readelf -l a.out | grep interpreter
  1. 调用自定义动态链接器直接查看程序依赖,就能得到正确的解析结果:
/root/tools/lib/ld-linux-x86-64.so.2 --list ./a.out
  1. 也可以在测试代码中调用gnu_get_libc_version()函数输出glibc版本,运行后会显示你编译的2.33版本,而非系统预装的glibc版本。

内容的提问来源于stack exchange,提问作者Li-Guangda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 05:27:03