1.查看so库是否存在
1.若不存在,则安装相应的包或源码编译相应的so库,并放到/usr/lib
或 /usr/local/lib
执行刷新
sudo ldconfig
这会把 /etc/ld.so.conf 和 /etc/ld.so.conf.d/ 里定义的路径都重新注册到动态链接器缓存。
2.若存在,则可能自身找不到它依赖的库
ldd xxxxxx.so
查看是否有 not found 的依赖项。然后查找对应的包继续安装尝试解决
2.安装包后还是警告不存在
1.查看包中是否包含缺失的so库
dpkg -L libopenexr-dev | grep .so
Linux 在加载 .so 时默认只查:
-
/lib
-
/usr/lib
-
/usr/local/lib
有时so库的文件被装在了 /usr/lib/x86_64-linux-gnu/ 或者 /usr/local/lib,但 ld.so 找不到链接。
2.使用软链接
sudo ln -s /usr/lib/x86_64-linux-gnu/libIlmImf-2_5.so.25 /usr/lib/x86_64-linux-gnu/libIlmImf-2_5.so
3.查找它们的具体位置
find /usr -name "libavcodec.so*"
4.运行时指定 LD_LIBRARY_PATH
如果 .so 们都在 /usr/lib/x86_64-linux-gnu,可以在执行时临时告诉它找这里:
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
-
有些 .so 默认装在 /usr/lib/x86_64-linux-gnu/,但某些 Linux 发行版的默认 ld.so.conf 里没包含这一路径
-
某些so库加载 .so 时只能依赖系统动态链接器找库,不会自己找绝对路径。