Bug : Error : loading shared libraries: cannot open shared object file: No such file or directory-阿里云开发者社区

开发者社区> biocodee> 正文

Bug : Error : loading shared libraries: cannot open shared object file: No such file or directory

简介: 动态库、静态库、环境变量、shell 变量
+关注继续查看

Error : loading shared libraries: cannot open shared object file: No such file or directory

1. 问题描述 :

程序S运行需要库L1库L2的支持。 库L1/L2完成安装后, 执行软件 S 时,库L2 shared object 无法加载, 提示文件或路径不存在

2. 解决方法:

当库为动态库(dynamic library)时, 运行程序S时需要为操作系统指明动态库的路径。

2.1 确定库(library)的路径:
$ sudo find / -name library_name.so
2.2 确定动态库路径是否存在于环境变量(LD_LIBRARY_PATH)
$ echo $LD_LIBRARY_PATH 
2.3 将动态库路径赋值给环境变量(LD_LIBRARY_PATH)
$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/the/lib
$ export LD_LIBRARY_PATH

即可运行程序。

拓展:

1. Linux系统中的库文件 :
库是被称为函数的预编译代码段的集合。库包含公共函数,它们一起形成一个包,称为库。函数是在整个程序中重复使用的代码块。在程序中重复调用这些代码片段可以节省时间。可以避免多次重写代码。对于程序员来说,库提供可重用的函数、数据结构、类等等。

库是不可执行的,这是进程和应用程序的关键区别。库在运行时或编译时发挥作用。在C编程语言中,有两种类型的库:动态库和静态库。

动态库与静态库 :
动态或共享库(dynamic or shared libraries)作为可执行程序文件之外的独立文件出现。因此,程序在运行时只需要动态/共享库文件的一个副本。而静态库(static libraries)被锁定在程序中。

2. Linux 系统环境变量:
环境变量与shell 变量 :

环境变量由shell管理。环境变量与常规shell变量的区别在于,shell变量是shell的特定实例(比如shell脚本)的局部变量,而环境变量是由您启动的任何程序“继承”的,包括另一个shell。也就是说,新进程获得自己的这些变量的副本,它可以读取、修改这些变量,并依次传递给自己的子进程。事实上,每个UNIX进程(不仅仅是shell)都将其环境变量传递给其子进程。

  • 在程序及其子程序中,环境变量是全局可用的。shell变量仅在当前shell中可用。
  • $SHELL这样的环境变量在系统范围内是有效的。在当前的Bash shell中,$ Bash指向Bash的执行路径,而$ shell指向定义为defaultshell(其值可能相同)。
#定义shell变量 VAR 及其 value
[biocodee@localhost ~]$ VAR="This is a variable"
[biocodee@localhost ~]$ echo $VAR
This is a variable
#查看shell变量是否存在于环境变量 env 当中
[biocodee@localhost ~]$ env | grep VAR
#将shell 变量转变为 环境变量
[biocodee@localhost ~]$ export VAR
[biocodee@localhost ~]$ env | grep VAR
VAR=This is a variable

参考资料:
[1] Linux error while loading shared libraries: cannot open shared object file: No such file or directory
[2] Linux Basics: Static Libraries vs. Dynamic Libraries
[3] Shell and Environment Variables.UNIX POWER TOOLS.
[4] Environment variable vs Shell variable, what's the difference?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
JVM中类加载的时机
本文主要记录下类的加载过程,一个类从加载到内存中开始到被卸载的整个生命周期作为java程序员来说应该还是要清楚的。
4 0
华为「鸿蒙」出世:全球首个微内核全场景分布式OS,可取代安卓,发布即开源
华为自研的鸿蒙系统究竟有多强大?刚刚,余承东在 HDC 2019 上为我们揭开了它的面纱——鸿蒙 OS,是一个划时代的全新操作系统。
4 0
关于自学django的服务器实践的体验
很多初学者想在服务器上实践自己的学习成果,却不知道如何入手,阿里云的开发者成长计划为我们开启了这个免费的体验机会,这对很多初学者来说是一个很好的实践平台,但其中还是有很多对于初学者不友好的因素,这是我第一次接触服务器,在这之前我并没有学过服务器怎么使用或者如何在服务器上部署自己开发的程序,以下是我遇到过的各种问题和解决方案。
6 0
Spring中使用的设计模式
Spring框架是每个java程序猿入门级的框架也是最重要的框架,而Spring中也采用了很多的设计模式,这些也会成为我们面试过程中经常会问到的问题,所以本文就整理出Spring中具体使用的哪些设计模式。
3 0
CV困境如何破:训练样本有限、2D视觉平面 VS 3D真实场景...
本文介绍了计算机视觉在实际场景和实际任务中存在的三种困境,以案例详细说明,并给出了潜在的解决方案。
3 0
Java策略模式(Strategy)
文章目录 策略模式(Strategy) 一.不使用策略模式 二.使用策略模式 1.案例类图 2.案例实现 3.总结 4.开发中的使用场景
3 0
如果你热爱编码,就应该少写代码
如果你热爱编码,就应该少写代码
3 0
Docker入门实战 (二) - Docker环境的搭建方法(上)
Docker入门实战 (二) - Docker环境的搭建方法
3 0
强烈推荐10本程序员必读的书
强烈推荐10本程序员必读的书
4 0
教妹学Java(五):Java程序在编译和运行时发生了什么
教妹学Java(五):Java程序在编译和运行时发生了什么
3 0
+关注
biocodee
bio2coder
18
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载