版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wenzhou1219/article/details/88380464
业界两大RPC框架thrift(Facebook)和protobuf(Google)现在可是用的非常普遍,linux上编译thrift遇到不少坑,记下来供有需要的朋友参考。
编译
系统环境:
- 操作系统为CentOS 6.5
- g++版本4.4(要求必须g++版本 >= 4.2)
下载:
- http://thrift.apache.org/download
- 当前编译的版本为thrift-0.12.0.tar.gz
先说正常流程,基本上就是参考官网流程来:
- 1.开发库全套
sudo yum -y groupinstall "Development Tools"
- 2.几个编译工具和库
-
- autoconf
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
tar xvf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure --prefix=/usr
make
sudo make install
cd ..
-
- automake
wget http://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz
tar xvf automake-1.14.tar.gz
cd automake-1.14
./configure --prefix=/usr
make
sudo make install
cd ..
-
- bison
wget http://ftp.gnu.org/gnu/bison/bison-2.5.1.tar.gz
tar xvf bison-2.5.1.tar.gz
cd bison-2.5.1
./configure --prefix=/usr
make
sudo make install
cd ..
-
- flex
sudo yum -y install flex
-
- c++ library
sudo yum -y install libevent-devel zlib-devel openssl-devel
-
- Boost
wget http://sourceforge.net/projects/boost/files/boost/1.53.0/boost_1_53_0.tar.gz
tar xvf boost_1_53_0.tar.gz
cd boost_1_53_0
./bootstrap.sh
sudo ./b2 install
- 3.thrift编译安装
git clone https://github.com/apache/thrift.git
cd thrift
./bootstrap.sh
./configure --with-lua=no
make
sudo make install
本机上如果对应库已经安装且版本比这高就不用安装了,这一套流程走下来,编译安装没问题,那就不用往下看了,如果有问题对照如下解决即可。
问题
- 提示少库,yum安装对应库后再编译
- ./src/thrift/server/TNonblockingServer.h:41:33: error: event2/event_compat.h: No such file or directory
这种情况是缺少的对应的库,libevent-devel只是安装了开发所需的头文件库而已,如下安装
wget https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz
tar xvf libevent-2.0.22-stable.tar.gz
cd libevent-2.0.22-stable
./configure --prefix=/usr/local
make
make install
- ‘apache::thrift::transport::THeaderTransport’ does not have any field named ‘TVirtualTransport’
这种情况是g++版本太低,不支持对应的模板语法,如下到文件./thrift/lib/cpp/src/thrift/transport/THeaderTransport.h,把THeaderTransport对应的两个构造函数模板参数补齐即可
/// Use default buffer sizes.
explicit THeaderTransport(const stdcxx::shared_ptr<TTransport>& transport)
: TVirtualTransport<THeaderTransport, TFramedTransport>(transport),
...
}
THeaderTransport(const stdcxx::shared_ptr<TTransport> inTransport,
const stdcxx::shared_ptr<TTransport> outTransport)
: TVirtualTransport<THeaderTransport, TFramedTransport>(inTransport),
...
}
下载
CentOS 6.5 上已编译好thrift下载链接
原创,转载请注明来自