编译指定Python版本的boost python

问题

默认安装boost的时候,没有指定Python版本,导致boost库里只有boost_python_27的版本。因为有需求使用python3,所以重新编译安装boost_python_37的版本

重新编译的过程

  1. 准备boost源码

  1. 在boost源码目录执行下述代码

./bootstrap.sh --with-python=/usr/bin/python3.7 --prefix=/home/boost/
//prefix 是指定安装路径
//with-python 指定python二进制的文件
  1. 修改boost下的project-config.jam文件,添加如下代码


# Python configuration
 
import python ;
 
if ! [ python.configured ]
 
{
 
using python : 3.7 : "/home/python3.7.5/bin/python3.7" : /home/python3.7.5/include/python3.7m : /home/python3.7.5/lib;
 
}

//格式:
//using python : python版本 : "python二进制路径" : python include 路径 : python lib 的路径
//貌似第2步做的也是这个事情

4. 编译安装boost

./b2 
 
./b2 install

ldconfig /usr/local/lib

踩过的坑

  1. Python编译安装时如果需要动态库的话的时候需要选择--enable-shared模式,不需要动态库的话可以去掉这个选项;--enable-optimizations 会开启优化,可能不利于DEBUG,也是选择性开启

./configure --prefix=/usr/local/python3 --enable-shared CFLAGS=-fPIC --enable-optimizations
  1. 实际上Boost Python 和Python 都可以使用对应的静态库,在使用cmake链接的时候强制指定静态库,不过这时候需要编译python 和 boost python的时候都指定对应的-fPIC模式。

// boost python 需要使用下面的方式编译fPIC
./b2 cxxflags=-fPIC cflags=-fPIC -a --with-python install

//python 的话则是需要重新去掉--enable-shared 重新编译对应的静态库文件
./configure  CFLAGS=-fPIC 
make 
make install

通过ldd 查看编译出来的so文件,可以看出是否依赖python.so 和boost python.so

引用文档

  1. https://blog.csdn.net/weixin_41923935/article/details/106967144

  1. https://blog.csdn.net/yy2yy99/article/details/120737679

  1. https://gist.github.com/melvincabatuan/a5a4a10b15ef31a5a481

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值