Linuxerror while loading shared libraries: libevent-2.1.so.6 的解决办法|动态库.so找不到的解决办法
【Linuxerror while loading shared libraries: libevent-2.1.so.6 的解决办法|动态库.so找不到的解决办法】时人不识凌云木,直待凌云始道高。这篇文章主要讲述Linuxerror while loading shared libraries: libevent-2.1.so.6 的解决办法|动态库.so找不到的解决办法相关的知识,希望能为你提供帮助。
目录
??原因??
??排查命令??
??例子??
最新的解答见:?
====================以下为旧内容=============原因?
默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通常通过源码包进行安装时,如果不指定--prefix,会将库安装在/usr/local/lib目录下;当运行程序需要链接动态库时,提示找不到相关的.so库,会报错。也就是说,/usr/local/lib目录不在系统默认的库搜索目录中,需要将目录加进去。
1、首先打开/etc/ld.so.conf文件
2、加入动态库文件所在的目录:执行vi /etc/ld.so.conf,在"include ld.so.conf.d/*.conf"下方增加"/usr/local/lib"。
3、保存后,在命令行终端执行:/sbin/ldconfig -v;其作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用,因此当安装完一些库文件,或者修改/etc/ld.so.conf增加了库的新搜索路径,需要运行一下ldconfig,使所有的库文件都被缓存到文件/etc/ld.so.cache中,如果没做,可能会找不到刚安装的库。
经过以上三个步骤,"error while loading shared libraries"的问题通常情况下就可以解决了。
如果还失败:如果运行应用程序时,还是提示以上错误,那就得确认一下是不是当前用户在库目录下是不是没有可读的权限。像我遇到的问题就是,从别的机子拷贝了一些.so动态库,然后用root权限放到了/usr/local/lib中(普通用户没有对该目录的写权限),然后切换用户运行程序时,始终提示找不到.so库,一直以为是我配置有问题,结果是因为权限原因,那些我用root权限增加到/usr/local/lib中的.so文件对于普通用户而言,是没有访问权限的,所以以普通用户运行程序,当需要链接.so库时,在/usr/local/lib中是查找不到的。
其实,对于由普通用户自己编译生成的.so库文件,比较好的做法是将这些.so库文件的路径用export指令加入到~/.bash_profile中的LD_LIBRARY_PATH变量中,LD_LIBRARY_PATH是程序运行需要链接.so库时会去查找的一个目录,~/.bash_profile是登陆或打开shell时会读取的文件,这样,每次用户登录时,都会把这些.so库文件的路径写入LD_LIBRARY_PATH,这样就可以正常地使用这些.so库文件了。
排查命令以memcached为例:
查看执行程序memcached缺少什么库:ldd /usr/local/memcached/bin/memcached
查看 库libevent-2.1.so.6是否存在:locate libevent-2.1.so.6
查看 程序memcached 查找依赖库的路径:LD_DEBUG=libs /usr/local/memcached/bin/memcached -v
例子?
执行 memcached 启动命令时,报错,提示:error while loading shared libraries: libevent-2.1.so.6: cannot open shared object file: No such file or directory
- 查看 memcached 命令缺失什么库
ldd /usr/local/memcached/bin/memcached
结果: libevent-2.1.so.6 模块找不到
- 查看 libevent-2.1.so.6 是否存在
locate libevent-2.1.so.6
- 结果: 系统已经安装了该模块,在路径 /usr/local/lib/
- 查看 memcached 查找依赖库的路径
LD_DEBUG=libs /usr/local/memcached/bin/memcached -v
结果: 在 /lib64/ 目录中查找,所以找不到已经安装好的
- 映射 libevent-2.1.so.6 到 /lib64 路径中
ln -s /usr/local/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6
结果:这样处理后,memcached就可以搜索到该文件了
- 启动memcached服务
/etc/init.d/memcached restart
此处会略有不同,因为提前已经安装了memcache开机启动脚本
文章图片
推荐阅读
- Linuxlocate: can not stat () `/var/lib/mlocate/mlocate.db‘: No such file or directory
- LinuxLinux 条件变量 为什么要配合互斥锁
- 彦思科技(低成本快部署船运物流管理系统,为航运企业降本增效)
- powershell 常用命令
- LinuxCPU频率控制|Conflicting CPU frequency values detected使用cpupower设置CPU Performance模式
- Linux查询安装包|软件包依赖和被依赖关系|yum|rpm
- Linux系统下的文件操作
- linux查看文件大小
- 操作系统解决kali安装dsniff失败