linux的thrift编译指南详细版(64位 + 32位)
一、简介
thrift是使用IDL定义接口的支持多种开发语言的RPC框架,是apache项目之一。
二、编译
- thrift依赖于boost、libevent和openssl。
- 64位系统编译32库需要安装gcc-multilib和g++ - multilib:
sudo apt-get install gcc-multilib g++-multilib
- 本教程使用Ubuntu 20.04和GCC 9.3.0。
1. OpenSSL
cd openssl-1.1.1k
./config --prefix=/usr/local/openssl
setarch i386 ./config -m32 --prefix=/usr/local/openssl
make
sudo make install
make test
2. libevent
cd libevent-2.1.12-stable
./configure --disable-openssl --prefix=/usr/local/libevent
CC="gcc -m32" ./configure i386 --disable-openssl --prefix=/usr/local/libevent
make
sudo make install
make check
3. boost
cd boost_1_77_0
./bootstrap.sh --show-libraries
./bootstrap.sh --prefix=/usr/local/boost
./bootstrap.sh --without-libraries=container,context,exception,stacktrace,type_erasure,filesystem,locale,chrono,contract,fiber,graph,graph_parallel,iostreams,log,math,mpi,python,program_options,random,test,wave --without-icu --prefix=/usr/local/boost
./b2 --with-system --with-serialization link=static threading=multi toolset=gcc address-model=64
sed '12c using gcc : : <cxxflags>-std=c++11 <compileflags>-m32 <linkflags>-m32;' -i project-config.jam
./b2 --with-system --with-serialization link=static threading=multi toolset=gcc architecture=x86 address-model=32
sudo ./b2 install
4. thrift
| 安装byacc、flex 和 bison
cd thrift-0.14.2
./configure --disable-tests --disable-shared --disable-tutorial --with-cpp --without-python --without-java --without-lua --without-csharp --without-erlang --without-php --without-php_extension --without-haskell --without-perl --without-go --without-c_glib --enable-static --with-boost=/usr/local/boost --with-libevent=/usr/local/libevent --prefix=/usr/local/thrift CPPFLAGS="-I/usr/local/openssl/include" LDFLAGS="-L/usr/local/openssl/lib -lssl -lcrypto"
./configure --disable-tests --disable-shared --disable-tutorial --with-cpp --without-python --without-java --without-lua --without-csharp --without-erlang --without-php --without-php_extension --without-haskell --without-perl --without-go --without-c_glib --enable-static --with-boost=/usr/local/boost --with-libevent=/usr/local/libevent --prefix=/usr/local/thrift CC="gcc -m32" CXX="g++ -m32" CPPFLAGS="-I/usr/local/openssl/include" LDFLAGS="-L/usr/local/openssl/lib -lssl -lcrypto"
make
sudo make install
三、检查
- 查看.a、.o、.so文件的信息
readelf -h libssl.a
- openssl提示找不到动态库
sudo ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1
sudo ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
- thrift是可以不使用openssl的,但它的编译脚本有问题!需要手动改!不折腾!
四、总结
- 现在的开发环境基本为64位,thrift默认编译为64位或交叉编译会相对简单,但是在64位系统编译为32位会很麻烦,因为thrift依赖于boost和libevent库,导致查阅资料和尝试编译耗时,效率不高。
- 学习thrift的入门时间成本很高,相对来说,一次成功编译后续可以直接使用,还是能接受的。
|