我工作的团队生成一个用于Python的共享库.这个库完全是C++,我们使用Boost来暴露给python.因为我们不能保证我们的客户端安装了Boost库,所以我们将Boost所需的功能静态地提供给共享对象文件.编译的最后阶段看起来很熟悉
g++ -o <output> <objects> -Wl,-Bstatic -lboost_python -lboost_regex ... -Wl,-Bdynamic -shared <other_opts>
我们传统上使用自己构建的Boost:1.47.这个版本现在已经很老了,所以我们希望更新.但奇怪的是,当我在CentOS 7系统上使用yum安装必要的对象时,我从gcc中收到以下错误:
relocation R_X86_64_32 against '.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
好吧,我以为我只需要下载最新版本(CentOS 7安装Boost 1.53)并自行构建.毕竟,这一直对我们有用.我按照这里的说明,但我得到了同样的错误.如何强制使用-fPIC来构建它构建的静态库?
Bra*_*pit 17
我相信boost -fPIC在编译共享库(.so文件)时会自动使用,但是下面的命令-fPIC也会在编译静态库(.a文件)时使用.
这对我来说在1.46.1上有所帮助:
sudo ./bjam cxxflags=-fPIC cflags=-fPIC -a ... install
该...是你添加额外的标志像threading=multi或者--layout=tagged,以及可选的项目,以建立(例如:列表--with-regex).
注意:我不确定cflags是否有必要,但似乎没有伤害.
参考链接:
| 归档时间: | 
 | 
| 查看次数: | 12053 次 | 
| 最近记录: |