找不到库文件,或者是没有安装,或者是安装了但没找到。没找到的原因是库文件所在文件夹不在搜索路径当中。因此,要想解决这个问题,就要安装,和设置搜索路径。作为非root用户,没有root权限也完全可以解决这两个问题。简单说,就是把库文件下载到某个用户文件夹下,然后把该文件夹路径添加到环境变量$LD_LIBRARY_PATH定义中(.bashrc)。
1. 库文件“安装”
在用户目录下建立lib文件夹,然后去网上搜索下载所缺少的库文件即可。如果搜到的是rpm包,解压命令:
rpm2cpio xxx.x86_64.rpm | cpio -div
2.库文件搜索路径
一般 Linux 系统把 /lib 和 /usr/lib
两个目录作为默认的库搜索路径。对于处于默认库搜索路径之外的库,需要将库的位置添加到库的搜索路径之中。设置库文件的搜索路径有两种方式,
root用户方式:在 /etc/ld.so.conf
文件中添加库的搜索路径,一行一个
非root用户方式:修改环境变量 $LD_LIBRARY_PATH
比如,某服务器上vi提示:error shile loading shared
libraries: libperl.so: cannot open shared object
file: No such file or directory.
$ ldd `which vim` 查看vim的库依赖,
linux-vdso.so.1 =>
(0x00007fff07b5b000)
libncurses.so.5 => /usr/lib64/libncurses.so.5
(0x000000384c000000)
libselinux.so.1 => /lib64/libselinux.so.1
(0x0000003102800000)
libacl.so.1 => /lib64/libacl.so.1
(0x0000003102000000)
libgpm.so.1 => /usr/lib64/libgpm.so.1
(0x0000003102400000)
libperl.so => not found
libresolv.so.2 => /lib64/libresolv.so.2
(0x0000003106400000)
libutil.so.1 => /lib64/libutil.so.1
(0x000000310d400000)
libc.so.6 => /lib64/libc.so.6
(0x0000003101000000)
libm.so.6 => /lib64/libm.so.6
(0x0000003101400000)
libdl.so.2 => /lib64/libdl.so.2
(0x0000003101800000)
libpthread.so.0 => /lib64/libpthread.so.0
(0x0000003101c00000)
libsepol.so.1 => /lib64/libsepol.so.1
(0x0000003102c00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003100c00000)
libattr.so.1 => /lib64/libattr.so.1
(0x0000003105400000)
libnsl.so.1 => /lib64/libnsl.so.1
(0x0000003104000000)
libcrypt.so.1 => /lib64/libcrypt.so.1
(0x0000003112e00000)
可以看到是找不到libperl.so。网上找到的解决方案是先安装libperl.so。如果已安装还找不到,则
locate
libperl.so找到其位置,然后把此路径添加到/etc/ld.so.conf中。问题是我没有root权限,无法使用这个方案。解决方法:首先去下了一个perl-libs-5.8.8-41.fc8.x86_64.rpm,rpm2cpio解压后里面只有一个文件libperl.so,把它放到$HOME/lib下,然后在.bashrc中添加:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/lib
source一下.bashrc,问题解决。