这两天想用用zookeeper,顺便做个提升。查了下官方给出的3.5.5和3.4.14。而php手册也有介绍配置方法,不过扩展好久没更新,就是试试用了。
下载php-zookeeper扩展,放到本地编译、安装。在执行make命令的时候总是报错缺少lzookeeper_mt.so库。
官方搜索教程都是老版本的,说是在文件根目录src/c下生成库。可是我用的是3.5.5版本的,目录下根本没有。
根据官方文档可知,新版本分为bin和源码版,也就是说bin是编译好的,下载后配置一下cfg文件就可以用了。
我下载的是bin版,已经编译好的,那就下载源码(zookeeper下载)版吧。在3.5.5中需要使用c端就必须编译安装库,在项目根目录下zookeeper-client中,怎么编译呢很懵逼。看官方文档(zookeeper3.5.5手册)是这样说的
感觉很复杂,其实梳理一下就明白了。不过我这被坑好几天。
先在zookeeper根目录下执行 ant compile_jute 命令,在zookeeper-client/zookeeper-client-c下生成目录generated
然后在zookeeper-client/zookeeper-client-c执行命令autoreconf -if 如果此时报错,一般就是autoconf,automake和libtool这个三个软件没安装,安装好后重新执行autoreconf -if
最后执行 ./configure –enable-debug 如果是开发或者测试环境就加–enable-debug
接下make一下,一般来说到这里会报错1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24rc/zookeeper.c: In function ‘print_completion_queue’:
src/zookeeper.c:2542:5: error: null argument where non-null required (argument 1) [-Werror=nonnull]
fprintf(LOGSTREAM,"Completion queue: ","empty\n");
^~~~~~~
src/zookeeper.c:2542:23: error: too many arguments for format [-Werror=format-extra-args]
fprintf(LOGSTREAM,"Completion queue: ","empty\n");
^~~~~~~~~~~~~~~~~~~~
src/zookeeper.c:2550:9: error: null argument where non-null required (argument 1) [-Werror=nonnull]
fprintf(LOGSTREAM,"%d,",cptr->xid);
^~~~~~~
src/zookeeper.c:2553:5: error: null argument where non-null required (argument 1) [-Werror=nonnull]
fprintf(LOGSTREAM,"end\n");
^~~~~~~
src/zookeeper.c: In function ‘format_endpoint_info’:
src/zookeeper.c:4410:21: error: ‘%d’ directive writing between 1 and 5 bytes into a region of size between 0 and 127 [-Werror=format-overflow=]
sprintf(buf,"%s:%d",addrstr,ntohs(port));
^~
src/zookeeper.c:4410:17: note: directive argument in the range [0, 65535]
sprintf(buf,"%s:%d",addrstr,ntohs(port));
^~~~~~~
src/zookeeper.c:4410:5: note: ‘sprintf’ output between 3 and 134 bytes into a destination of size 128
sprintf(buf,"%s:%d",addrstr,ntohs(port));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
这里卡了好久,通过网上查找才知道编译的时候gcc版本不同。我本地是gcc8.8,立马换系统centos7
在docker中安装centos7复制zookeeper源码、配置jdk、安装make、vim等软件后,以上步骤重新走一次就生成了,然后把生成的库(lib文件、include文件)复制一份放到本地zookeeper目录
编译php-zookeeper扩展,执行。、configure的时候指定一下库目录就可以啦。
结束了。
上一份跟官方组合的源码,带编译库zookeeper3.5.5
本文链接: https://erik.xyz/2019/07/30/php-pei-zhi-zookeeper3-5-5-kuo-zhan/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!