zoukankan      html  css  js  c++  java
  • C 小白的 thrift 环境搭建

    公司有个通讯 是用的 thrift ,thrift 是个什么都东西,可以类比 webservice 吧,比 webservice 高效些,不管是啥,搞他!

    先在 mac 上搞本地开发环境

    网上一搜 貌似依赖 boost、libevent

    boost 是 c/c++ std 的拓展,一些 list、vector 等等啥的,好像还有些比 std 更高级的功能,旁边搞c 的同事说太重了,他一般不用,不管了,下下来

    libevent 是 c/c++ 的网络通讯框架,类似java 下的 nio ?也下下来

    按网上的步骤安装 boost,发现依赖 高版本的 bison(2.6,系统自带的是2.4),这个 bison 是干啥的?“语法分析器生成器” ,是类似语法检查的?就是说标准的 c/c++ gcc 来检查,拓展的 boost 的语法由 bison 来检查?我先这样理解吧

    libevent 依赖 openssl,直接编译会报错 "<openssl/bio.h> not found"

    一、安装bison

    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 再启动试试

    二、安装 boost

    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

    三、安装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 是没有权限修改的,需要进入安全模式
    # 1、重启 2、开机按下 commond +r 3、进入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

    四、安装 libevent

    cd libevent-2.0.21-stable
    ./configure --prefix=/usr/local
    make clean
    make && make install

    五、安装 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 了

  • 相关阅读:
    EF实现增删改查
    托管代码与非托管代码的区别
    堆、栈以及队列
    C#装箱和拆箱
    Leecode刷题之旅-C语言/python-349两个数组的交集
    Leecode刷题之旅-C语言/python-344反转字符串
    Leecode刷题之旅-C语言/python-217存在重复元素
    Leecode刷题之旅-C语言/python-206反转链表
    Leecode刷题之旅-C语言/python-204计数质数
    Leecode刷题之旅-C语言/python-203移除链表元素
  • 原文地址:https://www.cnblogs.com/oftenlin/p/8696601.html
Copyright © 2011-2022 走看看