Linux下error while loading shared libraries的解决方法

1. 出现error while loading shared libraries的原因

1-1. 不存在该共享库,如果是这个原因,需要下载或者编译该共享库先了。

1-2. 存在该共享库,但是找不到或者共享库的不对

如果是第二种情况,请继续往下看。 

2.原因分析

系统查看共享库的过程:首先查找 /etc/ld.so.cache文件,如果找不到就查找环境变量里的LD_LIBRARY_PATH的值,如果找到了就到对应的目录加载该共享库,如果找不到就报error while loading shared libraries错误了;

 而/etc/ld.so.cache文件的内容是根据

/lib目录、

/usr/lib目录、

/etc/ld.so.conf(/etc/ld.so.conf文件包含/etc/ld.so.conf.d下所有conf文件)文件、

 这三个的内容生成的。

 3.解决方法

方法1:将你的共享库copy到/lib目录或者/usr/lib目录下,然后执行sudo ldconfig 来重新装载/etc/ld.so.cache文件

方法2:在ld.so.conf.d目录下创建一个conf文件(比如sudo vi test.conf),内容就是你共享库的路径,然后执行sudo ldconfig 来重新装载/etc/ld.so.cache文件

方法3:创建符号连接到/lib目录或者/usr/lib目录下,然后执行sudo ldconfig 来重新装载/etc/ld.so.cache文件。

  举例说明:ln -s /home/test/xx.so /usr/lib/xx.so //如果是因为版本号不对,可以符号连接改为需要的版本号 

方法4:就是在环境变量添加LD_LIBRARY_PATH的值了,也就是在当前用户目录下的.bashrc或.bash_profile文件里面添加类似如下:

export LD_LIBRARY_PATH=[so的绝对路径]:$LD_LIBRARY_PATH

附:命令行执行 export LD_LIBRARY_PATH=[lib的路径],临时生效,一般用于测试之类,很方便。

附:我就是使用方法2,网上看了很多人在/etc/ld.so.conf文件里面直接添加共享库的路径,这样也一样,但是为什么不是在ld.so.conf.d目录下创建一个conf文件呢?因为/etc/ld.so.conf文件实际上就是包含ld.so.conf.d目录下的所有conf文件。并且感觉这样管理好多了。
 

posted @   yongfengnice  阅读(2107)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示