ldconfig -p 看不到 .so 文件需先用 find 确认物理路径,再通过 /etc/ld.so.conf.d/ 添加非标准路径并执行 sudo ldconfig 刷新缓存;ld_library_path 仅作临时调试;ldd 报 not found 时须用 file 命令核对程序与 .so 的架构及 abi 兼容性。

ldconfig -p 看不到你的 .so 文件?先确认它真在那儿
运行 ldconfig -p | grep libbpf.so.1 没输出,不代表文件不存在——只是没被缓存识别。先用 find /usr -name "libbpf.so.1" 2>/dev/null 确认文件物理路径。常见位置是 /usr/lib64 或 /usr/local/lib64;如果落在 /opt/myapp/lib 这类非标准路径,ldconfig 默认根本不会扫。
/etc/ld.so.conf.d/ 下新建 conf 文件最稳妥
别直接改 /etc/ld.so.conf,系统更新可能覆盖。优先走子目录机制:
- 创建
/etc/ld.so.conf.d/local-lib64.conf(文件名任意,但必须以.conf结尾) - 写入单行路径:
/usr/lib64(不要加引号、不要斜杠结尾、不要空格) - 执行
sudo ldconfig,不是ldconfig -v——后者只打印不刷新缓存
验证是否生效:再次运行 ldconfig -p | grep libbpf.so.1,应看到对应路径输出。
LD_LIBRARY_PATH 是临时补救,不是长期方案
它绕过系统缓存,每次启动程序都重新搜路径,性能差且易被子进程继承污染。仅用于调试:
- 当前终端临时生效:
export LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH - 永久设置(仅限开发机):追加到
~/.bashrc,但务必加source ~/.bashrc才生效 - 注意:systemd 服务、crontab、GUI 应用默认不读取用户 shell 环境变量,此法无效
ldd 报错 “not found” 但文件存在?检查 ABI 兼容性
ldd ./loader 显示 libbpf.so.1 => not found,而你刚确认文件在 /usr/lib64,这时大概率是架构不匹配:
- 用
file /usr/lib64/libbpf.so.1查看是ELF 64-bit LSB shared object, x86-64还是aarch64 - 再用
file ./loader对比——两者 CPU 架构必须一致 - 32 位程序无法加载 64 位
.so,反之亦然;混用libc版本(如 glibc 2.33 vs 2.39)也可能触发隐式拒绝
真正难排查的点往往不在路径配置,而在二进制兼容层。缓存刷了十遍没用?先盯住 file 输出。











