这两天在搭一个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的时候
1 2 3 4 5 6 7 8 9 10 11 12 | 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 . \ 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 . \ 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 .
] 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-proto* -Wmissing-proto*
处是外层的貌似,我是在第二处依旧不起作用的时候,在处也添加了
记得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