linux程序运行时加载共享库出现的错误:51Testing软件测试网2L+iq1EK
"error while loading shared libraries: xxxx: cannot open shared object file: No such file or directory"51Testing软件测试网Y$C w2tT-C9VL
解决步骤:51Testing软件测试网}Dw*A/US0R
1、使用find命令查找缺失的xxxx共享库文件所在位置。参考:#find 目录 -name "xxxx*"51Testing软件测试网 p$}]Nz-WH)FjZ+q
2、将找到的目录位置写入 /etc/ld.so.conf 配置文件,这个文件记录了编译时使用的动态链接库的路径。51Testing软件测试网e|n!bu.P
3、将 /etc/ld.so.conf存档后,还要执行「/sbin/ldconfig –v」来更新一下才会生效。51Testing软件测试网m](D(rG'UD
51Testing软件测试网2Ch+yE#R2x.J y qU
注:使用 ldd 命令查看程序运行需要哪些库。 该命令用于判断某个可执行的 binary 档案含有什么动态函式库。该命令是一个 shell 脚本,不是程序。
o N?N-i\051Testing软件测试网-Dm;{i.N
51Testing软件测试网oM#s"wxxb/M9G:y
当运行vi或者vim时,报告如下错误:
J6I%|7O*?"nq'V]0vim: error while loading shared libraries: libperl.so: cannot open shared object file: No such file or directory?51Testing软件测试网+q!qnC4d
51Testing软件测试网hMZZ0v+b
解决方案51Testing软件测试网%}8@S*R dsr
出现类似错误是由于缺少相关的库文件(*.so文件)造成的
f] Rm/A.bIHp}0可能的原因是版本不匹配或者没有安装相应的rpm文件
[5I8q u!U3} mv0
5U _|u [!~*X0首先要执行的文件在那里,用which命令
m?._J p;|6^N0[root@test /root]# which vi51Testing软件测试网o#Q0{ z:?d$F7e u
alias vi='vim'51Testing软件测试网!U c+@1N.SQ
/usr/bin/vim
+V#f LrW@ fP)l0[root@test /root]#51Testing软件测试网/_(C6{ {{m%Y
即可看到vi命令在/usr/bin/vim路径
]o(Q"{i R051Testing软件测试网u{|1UTk
然后使用ldd命令确认这个程序执行需要哪些动态链接库
0Flh l#R"Al0[root@test /root]# ldd /usr/bin/vim51Testing软件测试网PS/G-W7U
libncurses.so.5 => /usr/lib/libncurses.so.5 (0x40017000)
"A;xV*Lji0libacl.so.1 => /lib/libacl.so.1 (0x40058000)51Testing软件测试网#xuS!fW5u#`
libgpm.so.1 => /usr/lib/libgpm.so.1 (0x4005e000)
U"B2f:A0}5c @E0libperl.so => not found
$G8p:cj9v*gEF*hw0libutil.so.1 => /lib/libutil.so.1 (0x40063000)51Testing软件测试网Xl B4]Z^2H
libm.so.6 => /lib/libm.so.6 (0x40066000)
*f1[ e?'i{g `a0libc.so.6 => /lib/libc.so.6 (0x40088000)
NW[1NL5t3E f0libdl.so.2 => /lib/libdl.so.2 (0x401ad000)51Testing软件测试网9l*bl-p7\ I6I-\%r2}
libpthread.so.0 => /lib/libpthread.so.0 (0x401b0000)51Testing软件测试网6f*wz"i~ r!CK
libattr.so.1 => /lib/libattr.so.1 (0x40201000)51Testing软件测试网0Htb2z@
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
8Lypnn051Testing软件测试网)pQ$vGc|Y_)L
上边输出的结果中,有一行是:
m%GX*e[-@UzT0libperl.so => not found
.ZC~qp?xBD \'d0可以确定为缺少这个文件而不能运行51Testing软件测试网(?}/}5r"{/|?3S$C

8d,L ^5ChKbE l0通过文件名,大致可以判断这个文件属于perl的rpm包51Testing软件测试网C&n/f[4K6AG
使用rpm -ql perl | grep libperl.so51Testing软件测试网| }ct r
通常可以找到这个文件的位置
r/WE9rtL,U3y0
'U5}$}i@#ye;Pv0[root@test /root]# rpm -ql perl | grep libperl.so51Testing软件测试网 x$U0t,j ]+V!Q DR
/usr/lib/perl5/5.8.3/i386-linux-thread-multi/CORE/libperl.so
\.wINY&M u0[root@test /root]#51Testing软件测试网/^4ss4Isx
51Testing软件测试网xA{0I5`$X
将这个文件做个link到系统的lib目录中即可51Testing软件测试网8M2AM-ps
ln -s /usr/lib/perl5/5.8.3/i386-linux-thread-multi/CORE/libperl.so /lib/libperl.so51Testing软件测试网1d*zN%k^ Qu'N(O5ly

c:K XZ_7g$u~dK0然后在运行ldd /usr/bin/vi确认是否找到了so文件
[6?!_Jd,^0如果找到的话就ok了