张芷铭的个人博客

LD_LIBRARY_PATH 指定运行时动态库搜索路径,适合临时解决库路径问题,但不推荐生产环境使用。

核心定义

动态链接器查找共享库(.so 文件)的目录列表,优先级高于系统缓存和默认目录。

使用方法

临时设置

1
2
export LD_LIBRARY_PATH=/opt/mylib/lib:$LD_LIBRARY_PATH
./my_program

单次运行

1
LD_LIBRARY_PATH=/opt/mylib/lib ./my_program

适用场景

  • 使用非标准路径的库
  • 测试新版本库
  • 无 root 权限安装

搜索优先级

  1. DT_RPATH(编译时写入)
  2. LD_LIBRARY_PATH
  3. DT_RUNPATH
  4. /etc/ld.so.cache
  5. 默认目录(/lib/usr/lib

风险

  • 可能导致版本冲突
  • 安全风险(恶意库劫持)
  • 不利于维护

替代方案

使用 ldconfig

1
2
echo "/opt/mylib/lib" | sudo tee /etc/ld.so.conf.d/mylib.conf
sudo ldconfig

编译时设置 RPATH

1
gcc -Wl,-rpath,/opt/mylib -o my_program my_program.c -L/opt/mylib -lmylib

包装脚本

1
2
3
#!/bin/bash
export LD_LIBRARY_PATH=/opt/mylib/lib
exec /opt/mylib/bin/my_program "$@"

Comments