zoukankan      html  css  js  c++  java
  • boost编译BUG

    linux GCC环境,boost在编译时未加-fPIC参数,导致如果有共享库使用boost静态库,会报如下错误:
    relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC

    如果使用automake编译,可以通过CPPFLAGS将-fPIC加进去。

    针对boost_1_53_0版本,修改tools/build/v2/tools/gcc.jam,注释掉387行:
         #if $(link) = shared
    可以打开-fPIC


    准备向boost提交这一BUG:
    https://svn.boost.org/trac/boost/newticket

    注:这是默认规则,因为automake编译也不会针对静态库加-fPIC,如果是自己写automake,则可以在Makefile.am中加上:
    AM_CXXFLAGS += -fPIC
    如果是第三方库的,则使用CPPFLAGS传进去。

    附:boost编译安装方法
    说明:下面内容仅针对Linux环境(boost官网为:http://www.boost.org/,可从这里下载它的源代码包,这里要求下载.tar.gz包,而非.7z、.zip或bz2包)。

    在当前目录下,解压boost库,如:
    tar xzf boost_1_52_0.tar.gz
    完成后,会在当前目录下新生成一个boost子目录boost_1_52_0,进入boost_1_52_0子目录,可以看到一个bootstrap.sh,执行它:
    ./bootstrap.sh
    执行成功后,会在当前目录下生成一个可执行程序b2,使用它来完成对boost的编译,b2的命令行参数为:
    ./b2 install --prefix=PREFIX


    完整脚本,不需要的组件使用--without去掉,如不需要python:--without-python
    #
    # install boost
    #
    printf " 33[1;33minstalling boost33[m "
    tar xzf $boost.tar.gz
    cd $boost
    #./bootstrap.sh --show-libraries
    ./bootstrap.sh --without-icu --without-libraries=python,graph,graph_parallel,mpi,wave
    if test $? -ne 0; then
    exit 1
    fi
    ./b2 install threading=multi --prefix=$THIRD_PARTY_HOME/boost --without-python --without-graph --without-graph_parallel --without-mpi --without-wave
    printf " 33[1;33m./b2 install return $?33[m "
    cd -


    https://svn.boost.org/trac/boost/ticket/8673
  • 相关阅读:
    深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
    sql之group by的用法
    jmeter参数化
    jmeter--FTP测试
    jmeter基础概念
    开源性能测试工具——jemeter介绍+安装说明
    mysql安装图解 mysql图文安装教程(详细说明)
    Elasticsearch全文检索优化研究
    如何正确的关闭Elasticsearch集群
    自定义查询系统架构设计分析
  • 原文地址:https://www.cnblogs.com/aquester/p/9891724.html
Copyright © 2011-2022 走看看