程序运行时出现libxxx.so.y => not found
Linux也为我们提供了一个名为LD_LIBRARY_PATH 的环境变量来解决运行时动态库查找路径的解决方案。
由这个环境变量所指定的路径会被装载器/lib/ld-2.12.so**优先查找**,然后才是动态库库缓存文件/etc/ld.so.cache。
但是千万不要在实际生产上线的运维环境里把“export LD_LIBRARY_PATH=…” 添加到.bash_profile或者/etc/profile里。
当你用“ldd 可执行程序名”查看一个软件启动时所依赖的动态库,如果输出项有“libxxx.so.y=> not found” 一项,你这个软件100%运行不起来。执行该文件时就会出现标题的问题libxxx.so: cannot open shared object file: No such file or directory
所以你所要做的是两件事:
- 确定你已正确编译该动态库libxxx.so,并且存在你的系统中。
- 找到该动态库的绝对路径(例如/xx/yy/zz/lib),然后执行以下过程:
- $ sudo vi /etc/profile (有root权限,如果无root权限则vi /home/当前用户目录/.bash_profile)
- 在末尾加入export LD_LIBRARY_PATH=/xx/yy/zz/lib:$PKG_CONFIG_PATH
(如果有多项则在$PKG_CONFIG_PATH之前用:分开,例如:export LD_LIBRARY_PATH=/xx/yy/zz/lib:/aaa/bbb/cc/lib$PKG_CONFIG_PATH) - 然后重启电脑或者输入source /etc/profile 即可
也可以“ldconfig 动态库所在路径”的方式解决的,但是那是针对有root权限的用户的解决办法。