phxpaxos安装编译流程

一、前言

  这篇博客记录了腾讯微信团队的phxpaxos安装编译过程,记录一些编译过程中的坑。
  github链接:
  phxpaxos github链接
  官方文档的编译手册:
  编译手册
  然而,官方的编译手册年代久远,所以依照其流程来操作可能会遇到一些问题,这里总结一下自己安装过程中的坑,并使用不同于编译手册的方式进行编译安装。

二、安装过程

1. 拉取代码

  官方文档使用

git clone --recursive https://github.com/tencent-wechat/phxpaxos.git

来拉取代码,这样可以把submodule一起拉取,但由于连接缓冲区大小或者连接超时时间的原因,有可能没办法一次拉取下来,所以可以尝试:先

git clone https://github.com/tencent-wechat/phxpaxos.git

拉取不带submodule的代码,然后进入./phxpaxos目录下,

git submodule init

git submodule update

拉取submodule,如果一次update不成功(连接失败或者只拉取了部分submodule),可以多用几次git submodule update直到所有submodule更新完成。

2. 编译 submodules(依赖库)

直接运行../phxpaxos/third_party/autoinstall.sh

为什么不按照官方编译手册来

  phxpaxos依赖leveldb、protobuf等module,这部分代码在../phxpaxos/third_party中,目录如下:
在这里插入图片描述
  官方手册分别编译不同的模块,这样比较麻烦,而且不够灵活,所以我们使用../phxpaxos/third_party/autoinstall.sh来进行安装编译。为什么不推荐跟着手册来,举两个例子:
1.在安装leveldb的时候官方手册有如下操作:

mkdir lib建立一个lib目录,然后cd lib;ln -s ../libleveldb.a libleveldb.a建立一个软链,PhxPaxos通过lib这个目录来寻址静态库。

  但实际上libleveldb.a可能并不在third_party/leveldb目录下,而是在third_party/leveldb/out-static目录下,而在../phxpaxos/third_party/autoinstall.sh中会自行判断并链接
在这里插入图片描述
2.在安装protobuf的时候官方手册有如下操作:

进入third_party/protobuf目录,运行./autogen.sh

  protobuf依赖gmock,所以在./autogen.sh中会下载安装gmock,但图示链接被墙,搭梯子上去之后也是404.
在这里插入图片描述
  而在../phxpaxos/third_party/autoinstall.sh中会先尝试重用third_party目录中的gmockgmock也是phxpaxos的submodule),然后再运行protobuf./autogen.sh,所以并不会出现问题。
在这里插入图片描述

可能会遇到的坑

a. glog aclocal-1.14 不存在

在这里插入图片描述
  先查看当前版本
在这里插入图片描述
  版本若不是1.14的话依次进行以下操作:
  找个合适的目录,如/usr/local/,然后

autoconf 编译

wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz

tar xvzf autoconf-2.69.tar.gz

cd autoconf-2.69; ./configure

make && make install

cd ..

automake 编译

wget http://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz

tar xvzf automake-1.14.tar.gz; cd automake-1.14

./configure

make && make install

  重新运行../phxpaxos/third_party/autoinstall.sh即可。

b. glog ‘./test-driver’ not found

在这里插入图片描述
  修改../phxpaxos/third_party/autoinstall.sh脚本
在这里插入图片描述
  在install_glog()函数中画框的位置添加:

automake --add-missing
aclocal-1.14

  重新运行../phxpaxos/third_party/autoinstall.sh便可下载缺失文件并正常工作。

c. protobuf 找不到AC_PROG_LIBTOOL

在这里插入图片描述
  由于安装了多个版本的aclocal(重新安了1.14),导致aclocal扫描configure.ac中所有的宏定义并展开的时候路径错误。aclocal是去默认安装目录/usr/share/aclocal下面搜索所有的.m4文件找所定义的宏,但是由于安装了多个aclocal,可能aclocal目录不存在,实际目录为/usr/local/share/aclocal等,这就造成了aclocal找不到m4文件的情况,需要将复制一份.m4文件到/usr/local/share/aclocal,因此需要执行以下命令

cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/

  重新运行../phxpaxos/third_party/autoinstall.sh便可正常执行。

3. 编译PhxPaxos静态库

  回到phxpaxos根目录

cd phxpaxos/
./autoinstall.sh
make && make install //默认使用-O2编译优化参数,如需编译debug版本,则命令为make debug=y

如仅需使用libphxpaxos.a进行开发,则编译就到此完成了。而如果希望使用我们的glog打日志插件模块,或者想尝试编译sample目录,或用于phxsql使用,则还需要编译libphxpaxos_plugin.a, 这个静态库依赖了glog。

4. 编译PhxPaxos Plugin静态库

cd phxpaxos/plugin
make && make install

编译成功检查上层lib目录下是否成功生成静态库libphxpaxos_plugin.a

三、example-phxecho

  编译phxecho

cd ../phxpaxos/sample/phxecho
make
mkdir log

  运行测试

// 启动三个进程
./phxecho 127.0.0.1:1000 127.0.0.1:1000,127.0.0.1:1001,127.0.0.1:1002
./phxecho 127.0.0.1:1001 127.0.0.1:1000,127.0.0.1:1001,127.0.0.1:1002
./phxecho 127.0.0.1:1002 127.0.0.1:1000,127.0.0.1:1001,127.0.0.1:1002

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  输入的内容会被所有进程看到并记录。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值