公司有個通信 是用的 thrift ,thrift 是個什麼都東西,能夠類比 webservice 吧,比 webservice 高效些,無論是啥,搞他!php
先在 mac 上搞本地開發環境java
網上一搜 貌似依賴 boost、libeventpython
boost 是 c/c++ std 的拓展,一些 list、vector 等等啥的,好像還有些比 std 更高級的功能,旁邊搞c 的同事說過重了,他通常不用,無論了,下下來linux
libevent 是 c/c++ 的網絡通信框架,相似java 下的 nio ?也下下來c++
按網上的步驟安裝 boost,發現依賴 高版本的 bison(2.6,系統自帶的是2.4),這個 bison 是幹啥的?「語法分析器生成器」 ,是相似語法檢查的?就是說標準的 c/c++ gcc 來檢查,拓展的 boost 的語法由 bison 來檢查?我先這樣理解吧web
libevent 依賴 openssl,直接編譯會報錯 "<openssl/bio.h> not found"bootstrap
1、安裝bisoncentos
wget http://ftp.gnu.org/gnu/bison/bison-2.6.4.tar.gz
tar -zxvf bison-2.6.4.tar.gz
cd bison-2.6.4
./configure
./configure && make -j $(getconf _NPROCESSORS_ONLN) && make install
# -j 意思好像是一共是幾核幾線程,加速 make 的速度的
bison -V
# 若是不行,就退出 Terminal 再啓動試試安全
2、安裝 boostruby
tar -zxvf boost_1_66_0.tar.gz
./bootstrap.sh —prefix=PATH_TO_BOOST
sudo ./b2 threading=multi address-model=64 variant=release stage install
3、安裝openssl
#先用 brew 安裝
# ---------------------------------------------------------------------------------------------------
brew install openssl
#安裝到了 /usr/local/Cellar/openssl/1.0.2n/bin 下 直接 openssl version 確定是不行的
sudo mv /usr/bin/openssl /usr/bin/openssl_old
sudo mv /usr/local/Cellar/openssl/1.0.2n/bin/openssl /usr/bin/openssl
# macOS Sierra 下 /usr/bin 是沒有權限修改的,須要進入安全模式
# 一、重啓 二、開機按下 commond +r 三、進入terminal 敲入 csrutil disable
# 可是 mv 了 也仍是不行,不能安裝 libevent 估計是 依賴的靜態類庫 或者 動態類庫,沒拷貝,只拷貝了 二進制可執行程序
brew link openssl
# 是否是把 lib 也拷貝過去了呢,好像也不行,算了換源碼安裝
# ---------------------------------------------------------------------------------------------------
tar -zxvf openssl-1.0.2l.tar
cd openssl-1.0.2l
sudo ./config --prefix=/usr/local/openssl
make
make install
# 在安裝 libevent 的時候仍是不行,缺乏依賴的 openssl 的類庫 "<openssl/bio.h> not found"
# 後來拷貝了頭文件,使得編譯經過
cp -R /usr/local/Cellar/openssl/1.0.2n/include/ /Users/carl/Downloads/libevent-2.1.8-stable
4、安裝 libevent
cd libevent-2.0.21-stable
./configure --prefix=/usr/local
make clean
make && make install
5、安裝 thrift
cd thrift-0.9.3
./bootstrap.sh
./configure --prefix=/usr/local/ --disable-static --with-boost=/usr/local --with-libevent=/usr/local --without-python --without-csharp --without-ruby --without-perl --without-php --without-haskell --without-erlang
make
make install
完成 thrift 安裝
thrift --version
能夠看到其版本號碼
編寫 thrift 的 demo_server、demo_client 的 hello world 程序時,卻發如今mac 系統下並無 其沒有生產對應的類庫
編譯不報錯,但運行 demo_server 時報錯了
錯誤是
dyld: Symbol not found: _GENERAL_NAME_free
Referenced from: /usr/local/lib/libthrift-0.9.3.dylib
Expected in: flat namespace
in /usr/local/lib/libthrift-0.9.3.dylib
Abort trap: 6
這個搞半天,好比 在 thrift configure 以後,make 以前加上
export CXXFLAGS="-std=c++11"
#直接致使 thrift 沒法生成了
發現 貌似是 Mac 的 gcc 是用的 llvm + clang ,這兩貨應該就是 linux 下的 gcc 的 mac 版本,就是說不是普通的 gcc 了,貌似上述問題都是因爲 mac 致使的,無論了,先在centos 虛擬機下面配置,若是可行的話,在把 gcc 給換了
centos 下的 thrift 安裝
步驟大同小異
只是 默認 centos 6.5 下 cmake 都沒有
在編譯 demo 程序時,安裝都 cmake 版本還要求比較高,高版本的 cmake 還須要高版本的 gcc一路升級吧
# 先 gcc 升級 到最新版本,是 4.8,找到一個 yum 的升級方法
cd /etc/yum.repos.d
wget http://people.centos.org/tru/devtools-2/devtools-2.repo
yum install devtoolset-2-gcc
yum install devtoolset-2-binutils
yum install devtoolset-2-gcc-gfortran
yum install devtoolset-2-gcc-c++
source /opt/rh/devtoolset-2/enable
cmake 3.11 安裝
./bootstrap --prefix=/usr
make
make install
終於能夠運行 thrift 的 demo 了