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加进去。
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 (请参见https://svn.boost.org/trac/boost/ticket/8673
注:这是默认规则,因为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
相关文章
|
开发工具 git
从 github 执行 git clone 一个大的项目时提示 error: RPC failed
目前克隆一个比较大的项目,出现RPC failed的错误 Cloning into 'bigfiles'... remote: Counting objects: 190, done. remote: Compressing objects: 100% (157/157), done.
4050 0
|
Python
Python小技巧:一种字符串的排序方式
该文介绍了如何对包含数字的字符串列表进行特定排序。首先,示例了一个初始问题,使用Python内置的`sorted()`函数未能达到预期(按数字部分升序排序)。然后,文章提出通过自定义排序键`sort_key`来解决,利用正则表达式提取字符串尾部数字并进行排序。进一步,文章扩展到处理如'nxxx_name_nxxx'格式的字符串,通过给前缀和后缀数字赋予不同权重进行复合排序,展示了如何实现先按前缀、再按后缀排序的功能。提供的代码示例成功地完成了任务。
182 0
|
缓存 负载均衡 应用服务中间件
Nginx入门 -- 理解Nginx基础概念:连接(Connection)
Nginx入门 -- 理解Nginx基础概念:连接(Connection)
286 0
|
Web App开发 存储 数据可视化
VCF文件修改染色体格式的方法
VCF文件修改染色体格式的方法
|
SQL 存储 Ubuntu
打开general_log对性能的影响
打开general_log对性能的影响
1632 0
打开general_log对性能的影响
|
JSON 数据格式
关于nlohmann::json的简单使用
关于nlohmann::json的简单使用
481 0
关于nlohmann::json的简单使用
|
NoSQL Linux
Linux系统调试篇——核心转储(core dump)
Linux系统调试篇——核心转储(core dump)
|
JSON 网络协议 API
GRPC远程调用
GRPC远程调用
470 0
|
NoSQL Linux
Linux 如何查看一个进程的堆栈
有两种方法:第一种:pstack 进程ID 第二种,使用gdb 然后attach 进程ID,然后再使用命令 thread apply all bt   第三种:strace -f -p pid  该方法和pstack类似 第四中:gcore pid ,输出core文件,gdb cmd corefile 两种方法都可以列出进程所有的线程的当前的调用栈。
6180 0
|
Linux PHP Unix
查看linux的进程到底用了多少内存
1. 在linux下,查看一个运行中的程序, 占用了多少内存, 一般的命令有    (1). ps aux:      其中  VSZ(或VSS)列 表示,程序占用了多少虚拟内存。
2950 0