6.thrift centos編譯

業界兩大RPC框架thrift(Facebook)和protobuf(Google)現在可是用的非常普遍,linux上編譯thrift遇到不少坑,記下來供有需要的朋友參考。

編譯

系統環境:

  • 操作系統爲CentOS 6.5
  • g++版本4.4(要求必須g++版本 >= 4.2)

下載:

先說正常流程,基本上就是參考官網流程來:

  • 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下載鏈接

原創,轉載請註明來自

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章