在Linux x86_64环境下编译memcached

1.下载memcached源码包

访问memcached官方网站http://memcached.org可以下载到最新最稳定版本的memcached源码包

下载Memcached源码包

下载完成后将其解压

[plain]  view plain  copy
  1. [root@lxp2 ~]# cd Download  
  2. [root@lxp2 Download]# ll  
  3. total 312  
  4. -rw-r--r-- 1 root root 311926 Nov 20 16:51 memcached-1.4.10.tar.gz  
  5. [root@lxp2 Download]# tar -xf memcached-1.4.10.tar.gz   
  6. [root@lxp2 Download]# ll  
  7. total 316  
  8. drwxr-xr-x 6 1000 1000   4096 Nov 10 08:32 memcached-1.4.10  
  9. -rw-r--r-- 1 root root 311926 Nov 20 16:51 memcached-1.4.10.tar.gz  

 

2.尝试配置memcached编译

进入memcached解压后的目录后,执行./configure命令来检测当前系统环境并生成makefile

[plain]  view plain  copy
  1. [root@lxp2 Download]# cd memcached-1.4.10  
  2. [root@lxp2 memcached-1.4.10]# ./configure   

如果在执行之后发现最后一行有如下提示表明缺少libevent库:

[plain]  view plain  copy
  1. checking for libevent directory... configure: error: libevent is required.  You can get it from http://www.monkey.org/~provos/libevent/  
  2.   
  3.       If it's already installed, specify its path using --with-libevent=/dir/  
  4.   
  5. [root@lxp2 memcached-1.4.10]#   

这是在编译memcached过程中经常遇到的问题(memcached基于libevent的事件处理机制。libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使服务器的连接数增加,也能发挥时间复杂度O(1)的性能。 memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。)。这时就要安装libevent库了。在libevent官方网站http://libevent.org中可以下载到最新最稳定版源代码:

下载libevent源码包

同样需要解压并进入解压后的源码包目录:

[plain]  view plain  copy
  1. [root@lxp2 Download]# ll  
  2. total 1140  
  3. -rw-r--r-- 1 root root 837650 Nov 20 17:16 libevent-2.0.16-stable.tar.gz  
  4. drwxr-xr-x 6 1000 1000   4096 Nov 20 17:03 memcached-1.4.10  
  5. -rw-r--r-- 1 root root 311926 Nov 20 16:51 memcached-1.4.10.tar.gz  
  6. [root@lxp2 Download]# tar -xf libevent-2.0.16-stable.tar.gz   
  7. [root@lxp2 Download]# cd libevent-2.0.16-stable  

接下来要配置libevent库的编译了。这里的配置需要注意添加--prefix参数,这个参数要指定编译完成后,如果安装此库,库安装到哪里。默认值是/usr/local。如果保持默认值,会将库安装到/usr/local/lib目录中。多数Linux发行版默认的加载库路径都不包含此路径。为了避免麻烦,这里指定--prefix=/usr。这样编译后安装就会安装到/usr/lib目录中了。这个目录是多数Linux发行版默认的加载库路径。

执行配置脚本:

[plain]  view plain  copy
  1. [root@lxp2 libevent-2.0.16-stable]# ./configure --prefix=/usr  

如果你在配置时忘了加这个参数,不要紧,后面还有解决办法,接着往下看。

配置好之后就可以编译了:

[plain]  view plain  copy
  1. [root@lxp2 libevent-2.0.16-stable]# make  

编译好之后就是用root权限安装:

[plain]  view plain  copy
  1. [root@lxp2 libevent-2.0.16-stable]# sudo make install  

 

3.正式编译memcached

刚刚介绍的是遇到了一个小麻烦时的解决办法,现在已经不存在libevent库缺失的问题了,如果你遇到了libevent库缺失的问题,此时需要回到memcached源码包目录,再次执行一次编译配置脚本:

[plain]  view plain  copy
  1. [root@lxp2 memcached-1.4.10]# ./configure  

不添加参数直接执行编译配置脚本,在安装时将自动安装到/usr/local/bin目录中。如果要更改安装位置,可以添加参数--prefix。例如--prefix=/usr/local/memcached,则安装时将安装到/usr/local/memcached/bin中。

检查没问题,可以开始编译了:

[plain]  view plain  copy
  1. [root@lxp2 memcached-1.4.10]# make  

编译完成后进行安装

[plain]  view plain  copy
  1. [root@lxp2 memcached-1.4.10]# sudo make install  

然后去看一看是否已经安装(memcached默认安装目录为/usr/local/bin)。转到memcached目录,然后启动memcached加参数-h显示帮助。帮助第一行即当前memcached版本:

[plain]  view plain  copy
  1. [root@lxp2 memcached-1.4.10]# cd /usr/local/bin/  
  2. [root@lxp2 bin]# sudo ./memcached -h  
  3. ./memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory  
  4. [root@lxp2 bin]#   

如果之前的libevent编译时加了--prefix=/usr参数,此时执行应该是正常的,会显示帮助信息。我刚才编译libevent库的时候故意没有加此参数,因此memcached到这一步的时候就会出现上面的问题——无法加载共享库libevent-2.0.so.5。如果你也遇到了这样的问题,接着往下看:

在多数linux发行版中,程序启动后静态加载的库默认查找路径为/lib(64位系统还有/lib64)和/usr/lib(64位系统中还有/usr/lib64),而目前我们编译的libevent库安装路径不在这些默认库加载路径中,因此需要配置库加载路径:

先通过ldd命令看一看memcached都需要加载哪些库:

[plain]  view plain  copy
  1. [root@lxp2 bin]# ldd memcached   
  2.         libevent-2.0.so.5 => not found  
  3.         librt.so.1 => /lib64/librt.so.1 (0x0000003714400000)  
  4.         libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003712800000)  
  5.         libc.so.6 => /lib64/libc.so.6 (0x0000003711c00000)  
  6.         /lib64/ld-linux-x86-64.so.2 (0x0000003711800000)  
  7. [root@lxp2 bin]#   

此时看到结果第一行:libevent-2.0.so.5 => not found,正是缺少的库,该库无法找到。

那这个库在哪里呢?我们来问一下系统:

[plain]  view plain  copy
  1. [root@lxp2 bin]# whereis libevent-2.0.so.5  
  2. libevent-2.0.so: /usr/local/lib/libevent-2.0.so.5  
  3. [root@lxp2 bin]#   

它告诉我们,libevent-2.0.so.5库存放在/usr/local/lib目录中。因此我们把这个目录加入到系统默认的库加载路径中。这里要修改系统环境变量$LD_LIBRARY_PATH。

先看一下当前$LD_LIBRARY_PATH的值:

[plain]  view plain  copy
  1. [root@lxp2 bin]# echo $LD_LIBRARY_PATH  
  2.   
  3. [root@lxp2 bin]#   

当前值为空,说明目前库加载路径还是上文提到的/lib(64位系统还有/lib64)和/usr/lib(64位系统中还有/usr/lib64)。接下来使用root权限修改/etc/profile文件,在文件末尾追加一行:

[plain]  view plain  copy
  1. export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH  

然后保存,更新一下系统配置:

[plain]  view plain  copy
  1. [root@lxp2 bin]# source /etc/profile  

再查看一下默认加载库路径:

[plain]  view plain  copy
  1. [root@lxp2 ~]# cd /etc/  
  2. [root@lxp2 etc]# source profile  
  3. [root@lxp2 etc]# echo $LD_LIBRARY_PATH  
  4. /usr/local/lib:  
  5. [root@lxp2 etc]#   

libevent库所在的目录已经添到了系统默认库加载路径中了,再次使用ldd命令查看memcached是否能够完全加载所需的库:

[plain]  view plain  copy
  1. [root@lxp2 etc]# cd /usr/local/bin/  
  2. [root@lxp2 bin]# ls  
  3. dialyzer  erl   escript          memcached  run_test  typer  
  4. epmd      erlc  event_rpcgen.py  run_erl    to_erl  
  5. [root@lxp2 bin]# ldd memcached   
  6.         libevent-2.0.so.5 => /usr/local/lib/libevent-2.0.so.5 (0x00002b52aedd1000)  
  7.         librt.so.1 => /lib64/librt.so.1 (0x0000003714400000)  
  8.         libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003712800000)  
  9.         libc.so.6 => /lib64/libc.so.6 (0x0000003711c00000)  
  10.         /lib64/ld-linux-x86-64.so.2 (0x0000003711800000)  
  11. [root@lxp2 bin]#   

已经都能找到了,看一下版本信息:

[plain]  view plain  copy
  1. [root@lxp2 bin]# ./memcached -h  
  2. memcached 1.4.10  
  3. -p <num>      TCP port number to listen on (default: 11211)  
  4. -U <num>      UDP port number to listen on (default: 11211, 0 is off)  

已经没有问题了。

 

至此memcached的编译安装完成。

猜你喜欢

转载自blog.csdn.net/qq_36103520/article/details/79594299