tokyo tyrant: 如何搭建这个tt server tokyo tyrant and tokyo cabinet

这两天在搭一个tt server,小日本写的一个cache服务器吧,性能据说比memcached要高好多,具体参数不详

这两天的首要任务就是搭建,搭建过程是一路坎坷,主要原因是linux基础太过薄弱

1. 在root账号下面,自己安装,一路顺风,啥都没问题,其实是照葫芦画瓢,最基本的安装,所以也不会有问题

2. 测试环境不可能提供root权限,所以必须要规避root权限进行安装,这样就遇到了各种各样的问题

在安装tokyo cabinet时候报错:

configure: error: bzlib.h is required

解决办法1:

apt-get install libbz2-dev

这样我在root权限下是可以解决的,ok,或者是root下不会遇到问题

但根本愿意是什么呢?

是由于缺少了两个依赖的包安装(叫法不大准确)

1. zlib-1.2.4

2. bzip2-1.0.5

网上说有先后顺去,但我没去验证,仅是按照上面的顺序进行安装的

zlib安装:

./configure

make

make install

bzip安装

make

make install

 

然后再去安装tokyo cabinet

./configure

这个时候可能还是会报错误,提示configure: error: bzlib.h is required,但是在指定的--prefix中,或许你可以看到,但是还是会报这个错误,看config.log,它找的路径还是在/usr里面,而不是我在./configure中指定的--prefix中的位置,这个时候,在./configure的时候,就需要再添加两个参数

--with-zlib,指定它的路径,具体可以看./configure --help,自己走了好多弯路,主要就是没有自己看configure的help

然后进行configure, 可能还是会报libbz2.h找不到,那就需要在configure中继续挂参数--with-bzip的位置了

 

安装tokyo tyrant的时候,可能还是会有类似的错误,同样指定位置解决

具体安装顺序,按照tokyo cabinet和tokyo tyrant的文档就可以搞定了

 

接着遇到的错误是在make install的时候

 

if uname -a | egrep -i 'SunOS' > /dev/null ; \
          then \
            gcc -g -O2 -std=c99 -Wall -fPIC -fsigned-char -O2 -shared -Wl,-G,-h,libtokyocabinet.so.9 -o libtokyocabinet.so.9.6.0 \
              tcutil.o tchdb.o tcbdb.o tcfdb.o tctdb.o tcadb.o myconf.o md5.o -L. -L/home/laurence/tt/tc/lib -L/home/laurence/lib -L/usr/local/lib -lbz2 -lz -lrt -lpthread -lm -lc  ; \
          else \
            gcc -g -O2 -std=c99 -Wall -fPIC -fsigned-char -O2 -shared -Wl,-soname,libtokyocabinet.so.9 -o libtokyocabinet.so.9.6.0 \
              tcutil.o tchdb.o tcbdb.o tcfdb.o tctdb.o tcadb.o myconf.o md5.o -L. -L/home/laurence/tt/tc/lib -L/home/laurence/lib -L/usr/local/lib -lbz2 -lz -lrt -lpthread -lm -lc  ; \
          fi
/usr/bin/ld: /usr/local/lib/libbz2.a(bzlib.o): relocation R_X86_64_32S against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libbz2.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [libtokyocabinet.so.9.6.0] Error 1


为便于被搜索到,再贴一遍,嘿嘿

if uname -a | egrep -i 'SunOS' > /dev/null ; \
          then \
            gcc -g -O2 -std=c99 -Wall -fPIC -fsigned-char -O2 -shared -Wl,-G,-h,libtokyocabinet.so.9 -o libtokyocabinet.so.9.6.0 \
              tcutil.o tchdb.o tcbdb.o tcfdb.o tctdb.o tcadb.o myconf.o md5.o -L. -L/home/laurence/tt/tc/lib -L/home/laurence/lib -L/usr/local/lib -lbz2 -lz -lrt -lpthread -lm -lc  ; \
          else \
            gcc -g -O2 -std=c99 -Wall -fPIC -fsigned-char -O2 -shared -Wl,-soname,libtokyocabinet.so.9 -o libtokyocabinet.so.9.6.0 \
              tcutil.o tchdb.o tcbdb.o tcfdb.o tctdb.o tcadb.o myconf.o md5.o -L. -L/home/laurence/tt/tc/lib -L/home/laurence/lib -L/usr/local/lib -lbz2 -lz -lrt -lpthread -lm -lc  ; \
          fi
/usr/bin/ld: /usr/local/lib/libbz2.a(bzlib.o): relocation R_X86_64_32S against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libbz2.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [libtokyocabinet.so.9.6.0] Error 1

这个提示很明显了,需要重新编译,加挂参数-fPIC

这个怎么搞呢?

1. zlib-1.2.4

make前,修改Makefile

CC=gcc -fPIC

CFLAGS=-O3 -fPIC -D_LARGEFILE64_SOURCE=1
#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
#CFLAGS=-g -DDEBUG
#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
#           -Wstrict-prototypes -Wmissing-prototypes

第一处是最外层的貌似,我是在第二处依旧不起作用的时候,在第一处也添加了

记得make前或者configure前,先进行make clean,或者将之前指定的目录prefix参数中的内容全部rm掉,比较彻底和暴力

 

2. bzip2-1.0.5

同上,修改Makefile,

# To assist in cross-compiling
CC=gcc -fPIC
AR=ar
RANLIB=ranlib
LDFLAGS=

BIGFILES=-D_FILE_OFFSET_BITS=64
CFLAGS=-Wall -Winline -O2 -fPIC -g $(BIGFILES)

然后进行make, make install

这样,和上面的一起,我就没有遇到异常了,可以正常启动了,网上的方法很多,但是这个方法是解决我所遇到的问题的最佳实践了,可能别的问题没有遇到吧都

 

待跟进的问题:

1. zlib-1.2.4

2. bzip2-1.0.5

上面这两个包的作用,仅知道是linux下的压缩用来

3. -fPIC参数的意义

还没有去进行自己研究

解决问题来自网络google

主要引自:http://henry2009.javaeye.com/blog/462705 这个是我的母版,我基本就是这个解决的

以及:http://blog.csdn.net/pwlazy/archive/2010/02/20/5313405.aspx 解决了我root权限下安装问题,或者说具有较高权限下的是可以的

posted @ 2010-03-20 01:05  foward.molly.宝儿  阅读(1172)  评论(0编辑  收藏  举报