error while loading shared libraries

error while loading shared libraries

原因

1 系统内无该共享库,或者共享库版本不对
2 系统内有,但按路径查找不到

解决方法

1 修改环境变量LD_LIBRARY_PATH

详情见原理

2 修改ld.so.conf

详情见原理

3 创建软连接

系统内有该共享库,但不在搜索路径下,可创建软连接指向路径 /usr/lib /lib /usr/lib/x86_64-linux-gnu/ ,等路径.
该方法用于解决 Error loading shared library libhdf5_hl.so Error loading shared library libhdf5.so等错误.

原理

库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的。

一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,所以使用这两个目录中的库时不需要进行设置搜索路径即可直接使用。对于处于默认库搜索路径之外的库,需要将库的位置添加到 库的搜索路径之中。设置库文件的搜索路径有下列两种方式,可任选其一使用:

1.修改环境变量LD_LIBRARY_PATH
在环境变量 LD_LIBRARY_PATH 中指明库的搜索路径。

#加入环境变脸
$ export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH
#查看库路径
$ echo $LD_LIBRARY_PATH

2.修改配置文件ld.so.conf
在 /etc/ld.so.conf 文件中添加库的搜索路径。
将自己可能存放库文件的路径都加入到/etc/ld.so.conf 中是明智的选择
添加方法也极其简单,将库文件的绝对路径直接写进去就OK了,一行一个。例如:
/etc/ld.so.conf是一个文件夹,其中可以根据自己需要建文件 **.conf ,存放某程序所需库路径

/usr/X11R6/lib
/usr/local/lib
/opt/lib

为了加快程序执行时对共享库的定位速度,避免使用搜索路径查找共享库的低效率,所以是直接读取库列表文件 /etc/ld.so.cache 从中进行搜索的。/etc/ld.so.cache 是一个非文本的数据文件,不能直接编辑,它是根据 /etc/ld.so.conf 中设置的搜索路径由 /sbin/ldconfig 命令将这些搜索路径下的共享库文件集中在一起而生成的(ldconfig 命令要以 root 权限执行).
因此,为了保证程序执行时对库的定位,在 /etc/ld.so.conf 中进行了库搜索路径的设置之后,还必须要运行 /sbin/ldconfig 命令更新 /etc/ld.so.cache 文件之后才可以。ldconfig ,简单的说,它的作用就是将/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache 以供使用。
在程序连接时,对于库文件(静态库和共享库)的搜索路径,除了上面的设置方式之外,还可以通过 -L 参数显式指定。因为用 -L 设置的路径将被优先搜索,所以在连接的时候通常都会以这种方式直接指定要连接的库的路径。

cite:
1. http://blog.sina.com.cn/s/blog_54f82cc201011ve4.html
2. https://www.cnblogs.com/Anker/p/3209876.html

猜你喜欢

转载自blog.csdn.net/san_junipero/article/details/80453972