zoukankan      html  css  js  c++  java
  • [原创]CentOS6.4编译安装Facebook的folly库(gcc4.8.1boost1.5.3)

      Folly: Facebook Open-souce LibrarY,Facebook开源的一个基础组件库,据说在大规模的场景中性能较高。目前因为自己负责的系统有几个地方性能较差,因此特意找来看看牛叉公司里别人都是怎么做的。简单瞄了几下源码,感觉代码还是比较清晰易懂,看上去至少比我司写的感觉清爽 T T
      由于Folly要求C++11支持,并且用到了boost,因此特意升级了最新版的gcc4.8.1及boost1.5.3,没想到一下子升级过头,git上的Folly直接下载后编译不过了,研究了下,发现Folly不支持最新的的gcc及boost,需要修改下代码,因此记录下。
     
     一、环境:
        CentOS6.4 64bit
        gcc4.8.1:http://gcc.gnu.org
        boost1.5.3:http://www.boost.org
        Folly Github:https://github.com/facebook/folly
     
     二、准备工作:
        根据folly目录下的readme,下载安装所需要的依赖,没带链接的,均为直接从CentOS6.4 iso安装镜像中直接安装,大家缺少什么,就自行yum安装下。
          命令格式:
          yum --disablerepo=* --enablerepo=c6-media install libtool
          PS:这里是指定yum源为本机上挂载的iso,可以联网的用户直接yum安装对应的依赖即可。
       需要的依赖列表:
        - g++(gcc之前已经更新到4.8.1,这里至少得升级到4.7)
        - automake
        - autoconf
        - libtool
        - libboost1.46-all-dev(boost之前已经更新到1.5.3,因此直接用1.5.3了)
        - libgoogle-glog-dev
        - gflags (packages need to be downloaded from below) (deb还是rpm根据自己的系统选择)
        - scons (for double-conversion)
     
        - double-conversion 
        - googletest (Google C++ Testing Framework)
     
     三、开始编译安装
      1.编译double-conversion需要拷贝folly的文件到double-sconversion下
           cp folly/SConstruct.double-conversion double-conversion
           cd ../double-sconversion
           scons -f SConstruct.double-conversion
     
       2.安装googletest
           unzip unzip gtest-1.6.0.zip -d folly/test
     
       3.编译安装folly(在folly目录下执行,可能会遇到一些错误,错误解决方法见最下方
           aclocal
           autoreconf
           automake --force-missing --add-missing
     
           下方的double-conversion替换成自己对应的目录
           LDFLAGS="-L/home/upload/double-conversion" CPPFLAGS="-I/home/upload/double-conversion/src" ./configure --enable-static --disable-shared
     
           make
           make install
     
    四、编译时可能出现的问题
    1. 出现  .././folly/FBVector.h:431:12: 错误:‘has_trivial_destructor’不是‘std’的成员
     原因:gcc4.8后,把has_trivial_destructor 函数改成了is_trivially_destructible
     解决方法:修改FBVector.h文件,把所有的has_trivial_destructor全部改成is_trivially_destructible
     
    2.出现 .././folly/detail/ThreadLocalDetail.h:205:7: 错误:‘lock_guard’不是‘boost’的成员
          或 .././folly/detail/ThreadLocalDetail.h:221:49: 错误:‘g’在此作用域中尚未声明
      原因:缺少头文件引用
      解决方法:在folly/detail/ThreadLocalDetail.h头文件中添加引用 #include <boost/thread/lock_guard.hpp>
     
    3.出现 error while loading shared libraries: libgflags.so.2
      原因:没安装gflags库或共享库路径中没包含libgflags.so.2所在的路径
      解决方案:
        我的gflags lib库安装在/usr/lib下(没有的话,需要自行搜索下or确认下是否安装),因此添加对应目录到共享库配置文件中,执行
       echo "/usr/lib" >> /etc/ld.so.conf
       ldconfig
      
      PS:也可以把路径加入到环境变量LD_LIBRARY_PATH中


    作者:Homer Wu


    欢迎转载,转载请保留原文连接。

  • 相关阅读:
    父子进程 signal 出现 Interrupted system call 问题
    一个测试文章
    《淘宝客户端 for Android》项目实战 html webkit android css3
    Django 中的 ForeignKey ContentType GenericForeignKey 对应的数据库结构
    coreseek 出现段错误和Unigram dictionary load Error 新情况(Gentoo)
    一个 PAM dbus 例子
    漫画统计学 T分数
    解决 paramiko 安装问题 Unable to find vcvarsall.bat
    20141202
    js
  • 原文地址:https://www.cnblogs.com/homerwu/p/compile_folly.html
Copyright © 2011-2022 走看看