原文:http://chenzhou123520.iteye.com/blog/1925196

linux上启动Memcache报错:

原因一般有两个, 一个是操作系统里确实没有包含该共享库(lib*.so.*文件)或者共享库版本不对, 遇到这种情况那就去网上下载并安装上即可.

另外一个原因就是已经安装了该共享库, 但执行需要调用该共享库的程序的时候, 程序按照默认共享库路径找不到该共享库文件.

因为我已经安装了libevent,所以应该是程序按照默认共享路径库去找,但是没有找到导致的。

首先使用find命令找到libevent-1.4.so.2文件在哪儿

使用debug信息查看程序去哪里寻找共享文件库

  1. LD_DEBUG=libs /usr/local/bin/memcached -v
    

      

其中/usr/local/bin/memcached代表我memcached执行程序

控制台输出结果如下:

  1. [root@localhost memcached]# LD_DEBUG=libs /usr/local/bin/memcached -v
    -bash: /usr/local/bin/memcached: No such file or directory
    [root@localhost memcached]# LD_DEBUG=libs /usr/local/memcached/bin/memcached -v
    6513: find library=libevent-1.4.so.2 [0]; searching
    6513: search cache=/etc/ld.so.cache
    6513: search path=/lib/tls/i686/sse2:/lib/tls/i686:/lib/tls/sse2:/lib/tls:/lib/i686/sse2:/lib/i686:/lib/sse2:/lib:/usr/lib/tls/i686/sse2:/usr/lib/tls/i686:/usr/lib/tls/sse2:/usr/lib/tls:/usr/lib/i686/sse2:/usr/lib/i686:/usr/lib/sse2:/usr/lib (system search path)
    6513: trying file=/lib/tls/i686/sse2/libevent-1.4.so.2
    6513: trying file=/lib/tls/i686/libevent-1.4.so.2
    6513: trying file=/lib/tls/sse2/libevent-1.4.so.2
    6513: trying file=/lib/tls/libevent-1.4.so.2
    6513: trying file=/lib/i686/sse2/libevent-1.4.so.2
    6513: trying file=/lib/i686/libevent-1.4.so.2
    6513: trying file=/lib/sse2/libevent-1.4.so.2
    6513: trying file=/lib/libevent-1.4.so.2
    6513: trying file=/usr/lib/tls/i686/sse2/libevent-1.4.so.2
    6513: trying file=/usr/lib/tls/i686/libevent-1.4.so.2
    6513: trying file=/usr/lib/tls/sse2/libevent-1.4.so.2
    6513: trying file=/usr/lib/tls/libevent-1.4.so.2
    6513: trying file=/usr/lib/i686/sse2/libevent-1.4.so.2
    6513: trying file=/usr/lib/i686/libevent-1.4.so.2
    6513: trying file=/usr/lib/sse2/libevent-1.4.so.2
    6513: trying file=/usr/lib/libevent-1.4.so.2
    6513:
    /usr/local/memcached/bin/memcached: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory

      

根据debug日志可以看到,程序只会去/lib 和/usr/lib下去寻找需要的共享链接库。

而我的libevent是安装在/usr/libevent/lib/下,所以memcache启动的时候并不知道该去这下面找,所以会报错

所以安装共享库后要注意共享库路径设置问题, 如下:

1) 如果共享库文件安装到了/lib或/usr/lib目录下, 那么需执行一下ldconfig命令

ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表.

2) 如果共享库文件安装到了/usr/local/lib(很多开源的共享库都会安装到该目录下)或其它"非/lib或/usr/lib"目录下, 那么在执行ldconfig命令前, 还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中, 如下:

  1. [root@localhost memcached]# cat /etc/ld.so.conf
  2. include ld.so.conf.d/*.conf

如上所示:/etc/ld.so.conf配置文件中内容只有一行,

ld.so.conf.d/*.conf的意思就是包含ld.so.conf.d/目录下以.conf为后缀的文件

所以我们可以在/etc/ld.so.conf.d目录下新建一个libevent.conf的配置文件,然后把libevent安装路径配置好

我的libevent内容如下:

  1. [root@localhost ld.so.conf.d]# cat libevent.conf
  2. /usr/libevent/lib

配置完后执行以下ldconfig命令

  1. [root@localhost ~]#ldconfig

3) 如果共享库文件安装到了其它"非/lib或/usr/lib" 目录下,  但是又不想在/etc/ld.so.conf中加路径(或者是没有权限加路径). 那可以export一个全局变量LD_LIBRARY_PATH, 然后运行程序的时候就会去这个目录中找共享库.

LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开. 比如安装了一个mysql到/usr/local/mysql目录下, 其中有一大堆库文件在/usr/local/mysql/lib下面, 则可以在.bashrc或.bash_profile或shell里加入以下语句即可:

export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH

一般来讲这只是一种临时的解决方案, 在没有权限或临时需要的时候使用.

这个问题的解决参考了网上的相关资料,特此说明!

【转】解决memcached启动失败的更多相关文章

  1. 【windows】查询占用端口的程序——记一次解决webloigc启动失败的过程

    . . . . . 我们经常使用的网络程序偶尔会遇到端口被占用的情况,但是却苦于无法找到占用端口的程序,这篇文章将教你两个命令,轻松排查端口占用问题. 关键命令: 1.查询端口占用:netstat - ...

  2. 解决Nginx启动失败

    一.Nginx下载http://nginx.org/en/download.html 二.Nginx启动失败原因1.本人下载的是nginx-1.12.1(稳定版),下载完解压后,进入路径中,start ...

  3. 解决springboot启动失败问题:Unable to start embedded container;

    将一个springboot项目导入到eclipse后,启动时报错Unable to start embedded container,以下时全部错误信息: Application startup fa ...

  4. Genymotion模拟器安装问题及解决(启动失败,模拟器不能联网)

    安装Genymotion模拟器安装后启动不了,报错: 百度的解决方法是打开VMVBirtualox选中自己的设备点击设置—常规—将版本设置为图中箭头所指的: 但是我这样做的时候发现我的下拉列表中没有6 ...

  5. 解决pgAdmin4启动失败方法

    1. 问题现象 有时pgadmin 4启动仅显示启动界面, 或者 点击图标一直都没反应,启动界面用鼠标点击下就消失了, 然后过很长时间就保错: the application server could ...

  6. 解决mysql启动失败报1067错误

    最近做项目使用 mysql 数据库 ,因为卸载了鲁大师造成了数据库文件缺失.重装mysql数据库后启动出现了1067错误,详情如下 在网上查了错误原因,将my.ini文件下的默认搜索引擎换成了 myi ...

  7. REDHAT7.2解决docker启动失败问题

    问题: [root@localhost ~]# service docker restartRedirecting to /bin/systemctl restart docker.serviceJo ...

  8. 【Linux】【Kibana】解决Kibana启动失败:Data too large问题

    今天重启Kibana容器,结果启动不了,一看日志发现是Data数据量太大报错. FATAL [circuit_breaking_exception] [parent] Data too large, ...

  9. <已解决> Eclipse启动失败

    参考:http://stackoverflow.com/questions/15404964/starting-eclipse-results-in-failed-to-create-java-vir ...

随机推荐

  1. springmvc入门程序

    学习java有好几个月了,今天才想起每天学习的东西还是会忘记,所以准备开始每天把头一天学习的东西写在博客上,首先也不会写博客,文笔比较差劲,但是为了学习和巩固,也方便以后可以查看.温习. 昨天看了下s ...

  2. bzoj1143 祭祀river(最大独立集)

    [CTSC2008]祭祀river Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2175  Solved: 1098[Submit][Status] ...

  3. 用MXNet实现mnist的生成对抗网络(GAN)

    用MXNet实现mnist的生成对抗网络(GAN) 生成式对抗网络(Generative Adversarial Network,简称GAN)由一个生成网络与一个判别网络组成.生成网络从潜在空间(la ...

  4. day01:study HTTP协议

    总结: 1.对web客户端和web服务器之间的通讯有了基本原理有了简单理解. 2.对http协议有了相关概念的建立 3.B/S C/S 两种形式 4.搭建tomcat服务器的环境,相关配置(虚拟目录 ...

  5. php过滤textarea 中的换行符问题

    之前我写的替换代码是这样的 $content = str_replace('\r\n', '', $_POST['content']); 为了确保window和Linux的换行符都能去掉,改成这样的: ...

  6. Python自学笔记-time模块(转)

    在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主要调用C库,所以各个平台可能有所不同 ...

  7. Python系列之反射、面向对象

    一.反射 说反射之前先介绍一下__import__方法,这个和import导入模块的另一种方式 1. import commons 2. __import__('commons') 如果是多层导入: ...

  8. c# 【MVC】WebApi设置返回Json

    public static HttpResponseMessage toJson(Object obj) { String str; if (obj is String || obj is Char) ...

  9. easyUI tree点击文字展开节点

    easyUI默认展开树的时候,点击节点前边的黑色小三角 ,这样操作存在不人性化的地方,在实际使用中由于老旧电脑的存在和大龄使用者的眼花经常点不准:因此要实现点击节点名称展开的方式,其实就是在展开事件上 ...

  10. oracle temporary table

    oralce 有两种临时表  a.会话级临时表 b.事物级临时表 A.事物级临时表 语法 create  global temporary table table_name( col1  type1, ...