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 "\n\033[1;33minstalling boost\033[m\n"

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 "\n\033[1;33m./b2 install return $?\033[m\n"

cd -

https://svn.boost.org/trac/boost/ticket/8673

05-11 17:27