近期公司要上RPC框架,综合考量后决定采用Thrift,没想到一个如此流行的RPC框架安装起来全是坑。文章基于centos6.5,thrift0.12.0
首先上官方的安装教程,官网只要求了DevelopmentTools,autoconf/automake/bison几个依赖,但实际上远远不够,先安装所需要的依赖:
sudo yum install -y automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel openssl-devel
然后根据官方教程,一步步安装,直到安装Boost时报了第一个错:
**configure: error: * A compiler with support for C++11 language features is required.
centos默认的gcc编译期版本为4.7,不支持c++11,所以先升级gcc:
yum -y install centos-release-scl
yum -y install devtoolset-6-gcc devtoolset-6-gcc-c++ devtoolset-6-binutils
scl enable devtoolset-6 bash
echo "source /opt/rh/devtoolset-6/enable" >>/etc/profile
之后安装thrift,make的时候报错:
/src/thrift/server/TNonblockingServer.h:43:33 fatal error event2/event_compat.h: No such file or directory
缺少event头文件,去libevent官网重新下载libevent安装,这里参考安装thrift全过程:
wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
tar -zxvf libevent-2.1.8-stable.tar.gz
cd libevent-2.1.8-stable
./configure --prefix=/usr/local
make
make install
继续安装,又报错。。。
/usr/lib64/libboost_unit_test_framework.a: No such file or directory
这个是因为./configure 的时候是默认编译32位的,不会在 /usr/lib64/ 下产生文件
修改方法:先查找文件 find / -name libboost_unit_test_framework.a,比如在 /usr/local/lib/libboost_unit_test_framework.a,然后修改软连接:
sudo ln -s /usr/local/lib/libboost_unit_test_framework.a /usr/lib64/libboost_unit_test_framework.a
完事继续安装,依然报错:
libthriftnb.so: undefined reference to `evutil_make_socket_closeonexec'
同样是libevent的版本问题,通过修改软连接解决:
ln -s /usr/lib/libevent* /usr/lib64
ln -sf /usr/lib/libevent* /usr/lib64
其中/usr/lib/为libevent的安装目录,继续安装,还在报错:
package golang.org/x/net/context: unrecognized import path "golang.org/x/net/context"
这个是由于缺少go的mock组件包,首先注释掉 test/go/Makefile 文件中
#GOPATH=pwd $(GO) get github.com/golang/mock/gomock
然后,手动下载gomock。
go get github.com/golang/mock/gomock
完事终于make通过不报错。