一.背景
在 Linux上安装Magent代理服务器软件时,在后面的文章会介绍介绍了Magent解决Memcached服务的负载均衡和容错上。我这边先介绍安装Magent过程中出现的问题。
二.问题
安装Magent过程中出现问题
#tar zxvf magent-0.5.tar.gz
#/sbin/ldconfig
#sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
#make
问题一:我在编译make Magent出现问题,如图所示:
分析:出现Libevent event和writev_list找不到SSIZE_MAX,我们第一个想到是不是我们Libevent
没安装,我们查看一下我们Libevent 有没有安装,如图所示:
有正确安装,那我们想到是不是没正确引用到Libevent ?
问题二:使用Magent命令时出现问题,报找不到libevent lib:magent: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
如图所示:
有正常安装好,是不是没引用到Libevent lib
三.解决问题一
根据分析,我们Libevent有正确安装,并且安装在/opt下,我们刚才分析到没引用到event和writev_list找不到SSIZE_MAX,Libevent我们安装在/opt目录下,我们想到Libevent的event在安装目录下的include目录下,如图所示:
Makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系,make时会读取Makefile文件,所以我们得先修改Makefile文件
第一步:修改Makefile
我们修改Makefile,把指向安装路径下的include目录,加入 INCLUDE=-I/opt/include,如图所示:
这时我们把引用Libevent的正确的路径包含进来,然后我们在执行#make编译命令,结果还可是出现问题,问题是writev_list找不到SSIZE_MAX,如图所示:
分析:是不是我们没设置这个SSIZE_MAX变量。
第二步:修改ketama.h
在这个文件定义SSIZE_MAX和设置值,如图所示:
第三步:执行make
我们执行#make,这时能正常编译,如图所示:
这时能正确的编译
四.解决问题二
我们编译过了,然后执行#magent命令时,出现/usr/bin/magent没这个文件或者目录,如图所示:
我们把magent复制到/usr/bin/magent,执行#cp magent /usr/bin/magent
这时我们执行#magent出现了magent: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory,这时是没找到对应的lib
我们把libevent-2.0.so.5放到/usr/lib文件下,就可以
#ln -s /opt/lib/libevent-2.0.so.5 /usr/lib
最后执行#magent这时会出现帮助,这样就能成功执行,如图所示: