本文记录一次在CentOS上安装Memcache的过程,其中也包含了安装过程中遇到的错误以及相应的解决方法。

Libevent安装

可以访问libevent.org网站下载最新的libevent,本文使用的是libevent-2.0.22-stable

,将下载的tar.gz包放到自己想安装的目录下。

解压缩

[root@dev18 libevent]# tar -zvxf libevent-2.0.22-stable.tar.gz

./configure

进入解压后的目录,执行./configure

[root@dev18 libevent]# cd libevent-2.0.22-stable
[root@dev18 libevent]# ./configure

执行后,部分配置显示的内容如下:

checking for struct addrinfo... yes
checking for struct sockaddr_storage... yes
checking for struct in6_addr.s6_addr32... yes
checking for struct in6_addr.s6_addr16... yes
checking for struct sockaddr_in.sin_len... no
checking for struct sockaddr_in6.sin6_len... no
checking for struct sockaddr_storage.ss_family... yes
checking for struct sockaddr_storage.__ss_family... no
checking for socklen_t... yes
checking whether our compiler supports __func__... yes
checking for the pthreads library -lpthreads... no
checking whether pthreads work without any flags... yes
checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE
checking if more special flags are required for pthreads... no
checking size of pthread_t... 8
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating libevent.pc
config.status: creating libevent_openssl.pc
config.status: creating libevent_pthreads.pc
config.status: creating Makefile
config.status: creating include/Makefile
config.status: creating test/Makefile
config.status: creating sample/Makefile
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
[root@dev18 libevent-2.0.22-stable]#

make

执行make编译

[root@dev18 libevent-2.0.22-stable]# make

部分编译显示的内容如下:

mv -f .deps/regress-regress_dns.Tpo .deps/regress-regress_dns.Po
gcc -DHAVE_CONfig_H -I. -I..  -I.. -I../compat -I../include -I../include -DTINYTEST_LOCAL     -g -O2 -Wall -fno-strict-aliasing  -MT regress-regress_testutils.o -MD -MP -MF .deps/regress-regress_testutils.Tpo -c -o regress-regress_testutils.o `test -f 'regress_testutils.c' || echo './'`regress_testutils.c
mv -f .deps/regress-regress_testutils.Tpo .deps/regress-regress_testutils.Po
gcc -DHAVE_CONfig_H -I. -I..  -I.. -I../compat -I../include -I../include -DTINYTEST_LOCAL     -g -O2 -Wall -fno-strict-aliasing  -MT regress-regress_rpc.o -MD -MP -MF .deps/regress-regress_rpc.Tpo -c -o regress-regress_rpc.o `test -f 'regress_rpc.c' || echo './'`regress_rpc.c
mv -f .deps/regress-regress_rpc.Tpo .deps/regress-regress_rpc.Po
gcc -DHAVE_CONfig_H -I. -I..  -I.. -I../compat -I../include -I../include -DTINYTEST_LOCAL     -g -O2 -Wall -fno-strict-aliasing  -MT regress-regress.gen.o -MD -MP -MF .deps/regress-regress.gen.Tpo -c -o regress-regress.gen.o `test -f 'regress.gen.c' || echo './'`regress.gen.c
mv -f .deps/regress-regress.gen.Tpo .deps/regress-regress.gen.Po
gcc -DHAVE_CONfig_H -I. -I..  -I.. -I../compat -I../include -I../include -DTINYTEST_LOCAL     -g -O2 -Wall -fno-strict-aliasing  -MT regress-regress_et.o -MD -MP -MF .deps/regress-regress_et.Tpo -c -o regress-regress_et.o `test -f 'regress_et.c' || echo './'`regress_et.c
mv -f .deps/regress-regress_et.Tpo .deps/regress-regress_et.Po
gcc -DHAVE_CONfig_H -I. -I..  -I.. -I../compat -I../include -I../include -DTINYTEST_LOCAL     -g -O2 -Wall -fno-strict-aliasing  -MT regress-regress_bufferevent.o -MD -MP -MF .deps/regress-regress_bufferevent.Tpo -c -o regress-regress_bufferevent.o `test -f 'regress_bufferevent.c' || echo './'`regress_bufferevent.c
mv -f .deps/regress-regress_bufferevent.Tpo .deps/regress-regress_bufferevent.Po
gcc -DHAVE_CONfig_H -I. -I..  -I.. -I../compat -I../include -I../include -DTINYTEST_LOCAL     -g -O2 -Wall -fno-strict-aliasing  -MT regress-regress_listener.o -MD -MP -MF .deps/regress-regress_listener.Tpo -c -o regress-regress_listener.o `test -f 'regress_listener.c' || echo './'`regress_listener.c
mv -f .deps/regress-regress_listener.Tpo .deps/regress-regress_listener.Po
gcc -DHAVE_CONfig_H -I. -I..  -I.. -I../compat -I../include -I../include -DTINYTEST_LOCAL     -g -O2 -Wall -fno-strict-aliasing  -MT regress-regress_util.o -MD -MP -MF .deps/regress-regress_util.Tpo -c -o regress-regress_util.o `test -f 'regress_util.c' || echo './'`regress_util.c
mv -f .deps/regress-regress_util.Tpo .deps/regress-regress_util.Po
gcc -DHAVE_CONfig_H -I. -I..  -I.. -I../compat -I../include -I../include -DTINYTEST_LOCAL     -g -O2 -Wall -fno-strict-aliasing  -MT regress-tinytest.o -MD -MP -MF .deps/regress-tinytest.Tpo -c -o regress-tinytest.o `test -f 'tinytest.c' || echo './'`tinytest.c
mv -f .deps/regress-tinytest.Tpo .deps/regress-tinytest.Po
gcc -DHAVE_CONfig_H -I. -I..  -I.. -I../compat -I../include -I../include -DTINYTEST_LOCAL     -g -O2 -Wall -fno-strict-aliasing  -MT regress-regress_main.o -MD -MP -MF .deps/regress-regress_main.Tpo -c -o regress-regress_main.o `test -f 'regress_main.c' || echo './'`regress_main.c
mv -f .deps/regress-regress_main.Tpo .deps/regress-regress_main.Po
gcc -DHAVE_CONfig_H -I. -I..  -I.. -I../compat -I../include -I../include -DTINYTEST_LOCAL     -g -O2 -Wall -fno-strict-aliasing  -MT regress-regress_minheap.o -MD -MP -MF .deps/regress-regress_minheap.Tpo -c -o regress-regress_minheap.o `test -f 'regress_minheap.c' || echo './'`regress_minheap.c
mv -f .deps/regress-regress_minheap.Tpo .deps/regress-regress_minheap.Po
gcc -DHAVE_CONfig_H -I. -I..  -I.. -I../compat -I../include -I../include -DTINYTEST_LOCAL     -g -O2 -Wall -fno-strict-aliasing  -MT regress-regress_thread.o -MD -MP -MF .deps/regress-regress_thread.Tpo -c -o regress-regress_thread.o `test -f 'regress_thread.c' || echo './'`regress_thread.c
mv -f .deps/regress-regress_thread.Tpo .deps/regress-regress_thread.Po
/bin/sh ../libtool --tag=CC   --mode=link gcc  -g -O2 -Wall -fno-strict-aliasing    -o regress regress-regress.o regress-regress_buffer.o regress-regress_http.o regress-regress_dns.o regress-regress_testutils.o regress-regress_rpc.o regress-regress.gen.o regress-regress_et.o regress-regress_bufferevent.o regress-regress_listener.o regress-regress_util.o regress-tinytest.o regress-regress_main.o regress-regress_minheap.o regress-regress_thread.o     ../libevent.la ../libevent_pthreads.la   -lrt 
libtool: link: gcc -g -O2 -Wall -fno-strict-aliasing -o .libs/regress regress-regress.o regress-regress_buffer.o regress-regress_http.o regress-regress_dns.o regress-regress_testutils.o regress-regress_rpc.o regress-regress.gen.o regress-regress_et.o regress-regress_bufferevent.o regress-regress_listener.o regress-regress_util.o regress-tinytest.o regress-regress_main.o regress-regress_minheap.o regress-regress_thread.o  ../.libs/libevent.so ../.libs/libevent_pthreads.so -lrt -Wl,-rpath -Wl,/usr/local/lib
make[3]: Leaving directory `/srv/libevent/libevent-2.0.22-stable/test'
make[2]: Leaving directory `/srv/libevent/libevent-2.0.22-stable/test'
make[1]: Leaving directory `/srv/libevent/libevent-2.0.22-stable'
[root@dev18 libevent-2.0.22-stable]#

make install

执行make install安装Libevent

[root@dev18 libevent-2.0.22-stable]# make install

部分安装显示的内容如下:

See any operating system documentation about shared libraries for
more information,such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
 /bin/mkdir -p '/usr/local/include'
 /usr/bin/install -c -m 644 event.h evhttp.h evdns.h evrpc.h evutil.h '/usr/local/include'
 /bin/mkdir -p '/usr/local/lib/pkgconfig'
 /usr/bin/install -c -m 644 libevent.pc libevent_pthreads.pc '/usr/local/lib/pkgconfig'
make[3]: Leaving directory `/srv/libevent/libevent-2.0.22-stable'
make[2]: Leaving directory `/srv/libevent/libevent-2.0.22-stable'
Making install in include
make[2]: Entering directory `/srv/libevent/libevent-2.0.22-stable/include'
make[3]: Entering directory `/srv/libevent/libevent-2.0.22-stable/include'
make[3]: nothing to be done for `install-exec-am'.
 /bin/mkdir -p '/usr/local/include'
 /bin/mkdir -p '/usr/local/include/event2'
 /usr/bin/install -c -m 644  event2/buffer.h event2/buffer_compat.h event2/bufferevent.h event2/bufferevent_compat.h event2/bufferevent_ssl.h event2/bufferevent_struct.h event2/dns.h event2/dns_compat.h event2/dns_struct.h event2/event.h event2/event_compat.h event2/event_struct.h event2/http.h event2/http_compat.h event2/http_struct.h event2/keyvalq_struct.h event2/listener.h event2/rpc.h event2/rpc_compat.h event2/rpc_struct.h event2/tag.h event2/tag_compat.h event2/thread.h event2/util.h '/usr/local/include/event2'
 /bin/mkdir -p '/usr/local/include'
 /bin/mkdir -p '/usr/local/include/event2'
 /usr/bin/install -c -m 644  ./event2/event-config.h '/usr/local/include/event2'
make[3]: Leaving directory `/srv/libevent/libevent-2.0.22-stable/include'
make[2]: Leaving directory `/srv/libevent/libevent-2.0.22-stable/include'
Making install in sample
make[2]: Entering directory `/srv/libevent/libevent-2.0.22-stable/sample'
make[3]: Entering directory `/srv/libevent/libevent-2.0.22-stable/sample'
make[3]: nothing to be done for `install-exec-am'.
make[3]: nothing to be done for `install-data-am'.
make[3]: Leaving directory `/srv/libevent/libevent-2.0.22-stable/sample'
make[2]: Leaving directory `/srv/libevent/libevent-2.0.22-stable/sample'
Making install in test
make[2]: Entering directory `/srv/libevent/libevent-2.0.22-stable/test'
make  install-am
make[3]: Entering directory `/srv/libevent/libevent-2.0.22-stable/test'
make[4]: Entering directory `/srv/libevent/libevent-2.0.22-stable/test'
make[4]: nothing to be done for `install-exec-am'.
make[4]: nothing to be done for `install-data-am'.
make[4]: Leaving directory `/srv/libevent/libevent-2.0.22-stable/test'
make[3]: Leaving directory `/srv/libevent/libevent-2.0.22-stable/test'
make[2]: Leaving directory `/srv/libevent/libevent-2.0.22-stable/test'
make[1]: Leaving directory `/srv/libevent/libevent-2.0.22-stable'
[root@dev18 libevent-2.0.22-stable]#

经过 配置(./configure)、编译 (make) 和安装 (make install) 三个步骤就完成了Libevent的安装。

安装好Libevent之后,我们就能继续前进安装Memcache了。

Memcache安装

和安装Libevent步骤类似,我们还是先下载memcache包,然后通过解压、配置(./configure)、编译 (make) 和安装 (make install) 几个步骤来安装。

访问memcache.org下载Memcache,本文下载的版本是memcached-1.4.33.tar.gz

解压缩

[root@dev18 memcached]# tar -zxvf memcached-1.4.33.tar.gz

./configure

进入解压后的目录,执行./configure

[root@dev18 memcached]# cd memcached-1.4.33
[root@dev18 memcached-1.4.33]# ./configure

部分配置显示的内容如下:

[root@dev18 memcached-1.4.33]# ./configure
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for icc in use... no
checking for clang in use... no
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking whether __SUNPRO_C is declared... no

make

执行make编译

[root@dev18 memcached-1.4.33]# make

部分编译显示的内容如下:

[root@dev18 memcached-1.4.33]# make
make  all-recursive
make[1]: Entering directory `/srv/memcached/memcached-1.4.33'
Making all in doc
make[2]: Entering directory `/srv/memcached/memcached-1.4.33/doc'
make  all-am
make[3]: Entering directory `/srv/memcached/memcached-1.4.33/doc'
make[3]: nothing to be done for `all-am'.
make[3]: Leaving directory `/srv/memcached/memcached-1.4.33/doc'
make[2]: Leaving directory `/srv/memcached/memcached-1.4.33/doc'
make[2]: Entering directory `/srv/memcached/memcached-1.4.33'
gcc -std=gnu99 -DHAVE_CONfig_H -I.  -DNDEBUG   -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing -MT memcached-memcached.o -MD -MP -MF .deps/memcached-memcached.Tpo -c -o memcached-memcached.o `test -f 'memcached.c' || echo './'`memcached.c
mv -f .deps/memcached-memcached.Tpo .deps/memcached-memcached.Po
gcc -std=gnu99 -DHAVE_CONfig_H -I.  -DNDEBUG   -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing -MT memcached-hash.o -MD -MP -MF .deps/memcached-hash.Tpo -c -o memcached-hash.o `test -f 'hash.c' || echo './'`hash.c
mv -f .deps/memcached-hash.Tpo .deps/memcached-hash.Po
gcc -std=gnu99 -DHAVE_CONfig_H -I.  -DNDEBUG   -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing -MT memcached-jenkins_hash.o -MD -MP -MF .deps/memcached-jenkins_hash.Tpo -c -o memcached-jenkins_hash.o `test -f 'jenkins_hash.c' || echo './'`jenkins_hash.c
mv -f .deps/memcached-jenkins_hash.Tpo .deps/memcached-jenkins_hash.Po
gcc -std=gnu99 -DHAVE_CONfig_H -I.  -DNDEBUG   -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing -MT memcached-murmur3_hash.o -MD -MP -MF .deps/memcached-murmur3_hash.Tpo -c -o memcached-murmur3_hash.o `test -f 'murmur3_hash.c' || echo './'`murmur3_hash.c
mv -f .deps/memcached-murmur3_hash.Tpo .deps/memcached-murmur3_hash.Po
gcc -std=gnu99 -DHAVE_CONfig_H -I.  -DNDEBUG   -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing -MT memcached-slabs.o -MD -MP -MF .deps/memcached-slabs.Tpo -c -o memcached-slabs.o `test -f 'slabs.c' || echo './'`slabs.c
mv -f .deps/memcached-slabs.Tpo .deps/memcached-slabs.Po
gcc -std=gnu99 -DHAVE_CONfig_H -I.  -DNDEBUG   -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing -MT memcached-items.o -MD -MP -MF .deps/memcached-items.Tpo -c -o memcached-items.o `test -f 'items.c' || echo './'`items.c
mv -f .deps/memcached-items.Tpo .deps/memcached-items.Po
gcc -std=gnu99 -DHAVE_CONfig_H -I.  -DNDEBUG   -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing -MT memcached-assoc.o -MD -MP -MF .deps/memcached-assoc.Tpo -c -o memcached-assoc.o `test -f 'assoc.c' || echo './'`assoc.c
mv -f .deps/memcached-assoc.Tpo .deps/memcached-assoc.Po
mv -f .deps/memcached_debug-bipbuffer.Tpo .deps/memcached_debug-bipbuffer.Po
gcc -std=gnu99 -DHAVE_CONfig_H -I.    -fprofile-arcs -ftest-coverage -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing -MT memcached_debug-logger.o -MD -MP -MF .deps/memcached_debug-logger.Tpo -c -o memcached_debug-logger.o `test -f 'logger.c' || echo './'`logger.c
mv -f .deps/memcached_debug-logger.Tpo .deps/memcached_debug-logger.Po
gcc -std=gnu99 -DHAVE_CONfig_H -I.    -fprofile-arcs -ftest-coverage -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing -MT memcached_debug-crawler.o -MD -MP -MF .deps/memcached_debug-crawler.Tpo -c -o memcached_debug-crawler.o `test -f 'crawler.c' || echo './'`crawler.c
mv -f .deps/memcached_debug-crawler.Tpo .deps/memcached_debug-crawler.Po
gcc -std=gnu99 -DHAVE_CONfig_H -I.    -fprofile-arcs -ftest-coverage -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing -MT memcached_debug-cache.o -MD -MP -MF .deps/memcached_debug-cache.Tpo -c -o memcached_debug-cache.o `test -f 'cache.c' || echo './'`cache.c
mv -f .deps/memcached_debug-cache.Tpo .deps/memcached_debug-cache.Po
gcc -std=gnu99 -fprofile-arcs -ftest-coverage -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing   -o memcached-debug memcached_debug-memcached.o memcached_debug-hash.o memcached_debug-jenkins_hash.o memcached_debug-murmur3_hash.o memcached_debug-slabs.o memcached_debug-items.o memcached_debug-assoc.o memcached_debug-thread.o memcached_debug-daemon.o memcached_debug-stats.o memcached_debug-util.o memcached_debug-bipbuffer.o memcached_debug-logger.o memcached_debug-crawler.o memcached_debug-cache.o   -lgcov  -levent -lrt 
gcc -std=gnu99 -DHAVE_CONfig_H -I.     -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing -MT sizes.o -MD -MP -MF .deps/sizes.Tpo -c -o sizes.o sizes.c
mv -f .deps/sizes.Tpo .deps/sizes.Po
gcc -std=gnu99  -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing   -o sizes sizes.o  -levent -lrt 
gcc -std=gnu99 -DHAVE_CONfig_H -I.     -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing -MT testapp.o -MD -MP -MF .deps/testapp.Tpo -c -o testapp.o testapp.c
mv -f .deps/testapp.Tpo .deps/testapp.Po
gcc -std=gnu99 -DHAVE_CONfig_H -I.     -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing -MT util.o -MD -MP -MF .deps/util.Tpo -c -o util.o util.c
mv -f .deps/util.Tpo .deps/util.Po
gcc -std=gnu99 -DHAVE_CONfig_H -I.     -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing -MT cache.o -MD -MP -MF .deps/cache.Tpo -c -o cache.o cache.c
mv -f .deps/cache.Tpo .deps/cache.Po
gcc -std=gnu99  -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing   -o testapp testapp.o util.o cache.o  -levent -lrt 
gcc -std=gnu99 -DHAVE_CONfig_H -I.     -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing -MT timedrun.o -MD -MP -MF .deps/timedrun.Tpo -c -o timedrun.o timedrun.c
mv -f .deps/timedrun.Tpo .deps/timedrun.Po
gcc -std=gnu99  -g -O2 -pthread -pthread -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fno-strict-aliasing   -o timedrun timedrun.o  -levent -lrt 
make[2]: Leaving directory `/srv/memcached/memcached-1.4.33'
make[1]: Leaving directory `/srv/memcached/memcached-1.4.33'
[root@dev18 memcached-1.4.33]#

make install

执行make install安装Memcache

[root@dev18 memcached-1.4.33]# make install

部分安装显示的内容如下:

[root@dev18 memcached-1.4.33]# make install
make  install-recursive
make[1]: Entering directory `/srv/memcached/memcached-1.4.33'
Making install in doc
make[2]: Entering directory `/srv/memcached/memcached-1.4.33/doc'
make  install-am
make[3]: Entering directory `/srv/memcached/memcached-1.4.33/doc'
make[4]: Entering directory `/srv/memcached/memcached-1.4.33/doc'
make[4]: nothing to be done for `install-exec-am'.
 /bin/mkdir -p '/usr/local/share/man/man1'
 /usr/bin/install -c -m 644 memcached.1 '/usr/local/share/man/man1'
make[4]: Leaving directory `/srv/memcached/memcached-1.4.33/doc'
make[3]: Leaving directory `/srv/memcached/memcached-1.4.33/doc'
make[2]: Leaving directory `/srv/memcached/memcached-1.4.33/doc'
make[2]: Entering directory `/srv/memcached/memcached-1.4.33'
make[3]: Entering directory `/srv/memcached/memcached-1.4.33'
 /bin/mkdir -p '/usr/local/bin'
  /usr/bin/install -c memcached '/usr/local/bin'
 /bin/mkdir -p '/usr/local/include/memcached'
 /usr/bin/install -c -m 644 protocol_binary.h '/usr/local/include/memcached'
make[3]: Leaving directory `/srv/memcached/memcached-1.4.33'
make[2]: Leaving directory `/srv/memcached/memcached-1.4.33'
make[1]: Leaving directory `/srv/memcached/memcached-1.4.33'
[root@dev18 memcached-1.4.33]#

同样,

经过 配置(./configure)、编译 (make) 和安装 (make install) 三个步骤就完成了Memcache的安装。

问题及解决

安装好Memcache之后,我们来启动Memcahce,

进入/usr/local/bin目录,执行

memcached -d -m 10 -u root -p 11211 -P /temp/memcached.pid尝试启动Memcache

参数说明:

-d 表示启动的是一个守护线程

-m RAM分配的数量,单位为MB,因为执行小于64MB可能还是会设置成64MB,所以本文就设置为64

摘要https://github.com/memcached/memcached/wiki/ConfiguringServer

-u 指定运行Memcache的用户

-p 执行Memcache监听的端口

-P pid文件保存的地址

出现如下问题:

memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory

[root@dev18 ~]# cd /usr/local/bin/
[root@dev18 bin]# memcached -d -m 64 -u root -p 11211 -P /temp/memcached.pid
memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
[root@dev18 bin]#

首先来看一下,Memcahce是从哪里找livevent-2.0.so.5的,使用LD_DEBUG=libs ./memcached -v命令查看。

[root@dev18 bin]# LD_DEBUG=libs ./memcached -v
      3668:	find library=libevent-2.0.so.5 [0]; searching
      3668:	 search cache=/etc/ld.so.cache
      3668:	 search path=/lib64/tls/x86_64:/lib64/tls:/lib64/x86_64:/lib64:/usr/lib64/tls/x86_64:/usr/lib64/tls:/usr/lib64/x86_64:/usr/lib64		(system search path)
      3668:	  trying file=/lib64/tls/x86_64/libevent-2.0.so.5
      3668:	  trying file=/lib64/tls/libevent-2.0.so.5
      3668:	  trying file=/lib64/x86_64/libevent-2.0.so.5
      3668:	  trying file=/lib64/libevent-2.0.so.5
      3668:	  trying file=/usr/lib64/tls/x86_64/libevent-2.0.so.5
      3668:	  trying file=/usr/lib64/tls/libevent-2.0.so.5
      3668:	  trying file=/usr/lib64/x86_64/libevent-2.0.so.5
      3668:	  trying file=/usr/lib64/libevent-2.0.so.5
      3668:	
./memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
[root@dev18 bin]#

从上面的结果可以看出,Memcache会从/usr/lib64/下查找livevent-2.0.so.5。

接下来,看一下libevent的相关路径信息,使用 whereis libevent来查找。

[root@dev18 bin]# whereis libevent
libevent: /usr/local/lib/libevent.so /usr/local/lib/libevent.la /usr/local/lib/libevent.a

从上面信息可以看出,libevent是被安装在/usr/local/lib/下了,这样问题就找到了。

正是因为路径不一致导致的问题:

libevent是被安装在/usr/local/lib/下,

Memcache会从/usr/lib64/下查找livevent-2.0.so.5

明白了问题所在,解决的办法就变得简单了,创建一个软链接即可

ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5

重新尝试启动,没有再报错,

[root@dev18 bin]# ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5
[root@dev18 bin]# memcached -d -m 64 -u root -p 11211 -P /temp/memcached.pid

使用ps -ef|grep memcached来查看Memcached相关进程,如下:

[root@dev18 bin]# ps -ef|grep memcached
root      3764     1  0 11:22 ?        00:00:00 memcached -d -m 10 -u root -p 11211 -P /temp/memcached.pid
root      3775  3580  0 11:23 pts/0    00:00:00 grep memcached
[root@dev18 bin]#

至此,Memcache的简单安装和启动就完成了。

CentOS上安装Memcache及问题解决的更多相关文章

  1. iOS 10 Safari问题在DOM中不再包含元素

    使用此链接,您可以重现该错误.https://jsfiddle.net/pw7e2j3q/如果您点击元素并从dom中删除它,然后单击链接测试.你应该看到旧的元素弹出选择.是否有一些黑客来解决这个问题?解决方法我能够重现这个问题.问题是,每当您尝试删除其更改事件上的选择框时,iOS10都无法正确解除对选择框的绑定.要解决此问题,您需要将代码更改事件代码放在具有一些超时

  2. ios – 有没有办法针对存档版本(.ipa)运行XCTest(UI)?

    要么我们可以单独构建和测试,以便我们可以先构建并在以后对该构建进行测试吗?

  3. ios – 尝试修复崩溃:QuartzCore – CA :: release_objects(X :: List *)

    我们的应用程序遇到了几次崩溃,想知道您是否有任何见解或有过类似的经历.我已经分享了下面的崩溃日志信息.运行iOS8.1.我们已经通过仪器,静态分析仪运行它,并且仍在努力指出问题.解决方法这里的问题是你在CoreAnimation没有预料到的对象上做了一个额外的发布,所以问题在你的代码中引入,但是当动画框架进行清理阶段时会暴露出来.要解决此问题,请使用性能分析.选择Allocationsprofil

  4. ios app如何“知道”运行单元测试

    我知道我可以用xcodebuild开始我的应用程序的单元测试,但我想知道是什么告诉应用程序在启动期间运行测试,它是一个发送到应用程序的特殊参数,还是以不同的方式编译以运行测试?

  5. ios – 如何在Swift中正确转换为子类?

    我有一个带有许多不同单元格的UITableView,基于数据源内容数组中的内容,它们应该显示自定义内容.在这里我得到了错误UITableViewCell没有属性customLabelQuestionTableViewCell有哪些.我的演员到QuestionTableViewCell有什么问题?解决方法问题不是你的演员,而是你的细胞宣言.您将其声明为可选的UITableViewCell,并且该声明

  6. xcode – 添加OCMock会导致Test启动主应用程序而不是运行测试

    我正在尝试将Ocmock添加到我现有的Cocoa项目中,但我遇到了一个我没有看到其他人覆盖的奇怪问题.我最终将它分离到以下内容:如果我只是将Ocmock.framework引用添加到我的项目中(即以某种方式将其拖到LinkBinaryWithLibraries构建阶段),当我运行测试时,真正的应用程序将被启动.没有Ocmock,输出正常:使用Ocmock框架链接(部分输出):此后,其他应用程序输出

  7. ios – “只在主线程上运行”异常是模拟器

    我得到一个“只运行在主线程”异常深处(或之后)事情只发生在模拟器上,而不是在IOS设备中进行调试.有什么机会我可以解决这个问题吗?

  8. Xcode:用于条件DEBUG / TEST代码的预处理器宏

    我在我的代码(例如AppDelegate.m)中有不应该为单元测试编译的部分,例如当您在创建新项目时选择“添加单元测试”时,目标是由Xcode设置的.在项目文件中,我已将标志CONfigURATION_TESTS添加到内置目标的MyAppTests的预处理器宏中,但未添加到MyApp目标.这是我发现的许多帖子中的建议方式.但是这不起作用,因为(我猜)MyAppTests目标将MyApp目标作为依赖

  9. ios – gpus_ReturnNotPermittedKillClient中有很多崩溃

    有没有办法解决或避免这个?

  10. ios – 嵌套递归函数

    我试图做一个嵌套递归函数,但是当我编译时,编译器崩溃.这是我的代码:编译器记录arehere解决方法有趣的…它似乎也许在尝试在定义之前捕获到内部的引用时,它是bailing?以下修复它为我们:当然没有嵌套,我们根本没有任何问题,例如以下工作完全如预期:我会说:报告!

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部