Linux LD_LIBRARY_PATH相关

说明

LD_LIBRARY_PATH是Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。

运行时动态库的搜索路径先后顺序

1.编译目标代码时指定的动态库搜索路径,一般通过 -Wl,-rpath 来设置
2.环境变量LD_LIBRARY_PATH指定路径
3./etc/ld.so.conf文件中的指定路径
4.默认的动态库搜索路径/lib,/usr/lib

设置方法

1. 临时生效
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/XXX
2. 修改/.bashrc或/.bash_profile或系统级别的/etc/profile
在配置文件中添加 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/XXX
source .bashrc
source 命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录
3. 修改/etc/ld.so.conf
在/etc/ld.so.conf文件中追加指定路径,修改完成后通过ldconfig命令生效

链接库查找失败

一般我们在Linux下执行程序的时候可能会提示找不到共享库的错误, 例如
libonnxruntime.so.1.10.0: cannot open shared object file: No such file or directory

1.默认共享库路径没有libxxx.so,那么将相应的动态库拷贝到默认共享库路径下即可。

2.默认共享库路径没有包含libxxx.so所在的目录,设置 LD_LIBRARY_PATH 可以解决问题

3.在设置 LD_LIBRARY_PATH 的时候,LD_LIBRARY_PATH 指定的路径下是不存在的,LD_LIBRARY_PATH 设置完成之后,目录才被创建出来,此时也会报找不到 libxxx.so 的错误
解决方法有两种
a.设置 LD_LIBRARY_PATH 之前就先将动态库所在的路径创建完成,这种方法可以避免上述问题
b.目前创建完成之后,执行一下 ldconfig 命令,也可以避免上述问题
备注: ldconfig命令本质上是 /sbin/ldconfig,有些终端直接执行 ldconfig可能会报 ldconfig: command not found,可以使用 /sbin/ldconfig来替代

posted on 2017-09-17 11:19  寒魔影  阅读(14652)  评论(0编辑  收藏  举报

导航