天天看点

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

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

    指向定义为

    default

    shell

    (其值可能相同)。
#定义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?