栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

linux下boost.python安装过程记录

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux下boost.python安装过程记录

Linux下boost.python安装过程记录

在安装boost.python库中踩坑无数,遇到了各种各样奇奇怪怪的bug,这里将安装过程进行小小的总结

文章目录
  • Linux下boost.python安装过程记录
  • 前言
  • 一、相关环境
  • 二、安装步骤
    • 1.boost.python的检查与卸载
      • (1)包管理器安装方式的检查 卸载
      • (2)编译方式安装的检查 卸载
    • 2.boost.python安装
      • (1)下载安装包
      • (2)解压,进入首层目录(采用root用户)
      • (3)找到python安装位置
      • (4)编辑project_config.jam文件
      • (5)编译安装
      • (6)在profile中添加boost路径(编译成功后,会提示路径)
      • (7)运行环境
      • (8)更新连接库
    • 3.代码编译方法
    • 4.链接库
  • 一点点总结
  • 参考链接


前言

boost.python库被用于C++与Python代码间的交互,提供了两者间大部分数据类型的转换。这里,总结一下在Linux系统下安装该库的过程。


一、相关环境

操作系统:Ubuntu 20.04
python版本:Python 3.8
boost版本:boost 1.78.0(!boost 1.68.0版本之前似乎存在bug,在python中调用C++代码封装库后会报错,查了相关资料似乎是系统架构问题???)

二、安装步骤 1.boost.python的检查与卸载

在安装boost之前需要检查系统中是否已经安装boost库,若系统中存在则需要卸载干净。(不然要出大问题。。。

(1)包管理器安装方式的检查 卸载
系统类别检查命令
redhatrpm -qf /usr/include/boost/version.hpp
debiandpkg -S /usr/include/boost/version.hpp

检查到了则需卸载:

系统类别卸载命令
redhatsudo yum remove libboost***-dev
debiansudo apt-get autoremove libboost***-dev

(***为版本号)

(2)编译方式安装的检查 卸载

通过find命令查找boost/version.hpp

sudo find / -iname version.hpp

查看boost版本

cat version.hpp| grep "BOOST_LIB_VERSION"

卸载boost

sudo rm -r -f /usr/local/include/boost*
sudo rm -f /usr/local/lib/libboost*

(*为相关版本信息)

2.boost.python安装 (1)下载安装包

从官网上下载需要版本的就可以啦啦啦

(2)解压,进入首层目录(采用root用户)
sudo -i
cd boost_1_78_0

(***是相关的存储位置信息)

(3)找到python安装位置

使用whereis python命令查找,一般在/usr/bin/下,对应安装版本;
--prefix表示boost安装路径(默认目录为/usr/local/lib 和/usr/local/include/boost)
执行命令,选择完全安装

./bootstrap.sh --with-libraries=all --prefix=/usr/local/boost
(4)编辑project_config.jam文件
vim project_config.jam

在project_config.jam中python对应地方加入指定版本的python 的include和lib

using python : 3.8 : /usr/bin/python3.8 : /usr/include/python3.8 : /usr/lib/python3.8 ;

表示意义:版本号 : 可执行文件位置:头文件目录:库文件目录
注意:这里为python所在位置,根据自己实际情况来,可直接在对于python环境下,输入一下命令:

import sys
sys.path
(5)编译安装
./b2
./b2 install --with-python include="/usr/include/python3.8"

这里include对应python的include目录。
安装成功会在 /usr/local/include/boost 和 /usr/local/lib 下看到boost的头文件和库文件

(6)在profile中添加boost路径(编译成功后,会提示路径)
vim /etc/profile

添加内容为:

export CPLUS_INCLUDE_PATH=/home/pigeon/boost/boost_1_78_0:$CPLUS_INCLUDE_PATH
export LIBRARY_PATH=/home/pigeon/boost/boost_1_78_0/stage/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/home/pigeon/boost/boost_1_78_0/stage/lib:$LD_LIBRARY_PATH
(7)运行环境
source /etc/profile
(8)更新连接库
ldconfig
3.代码编译方法

编译C++代码,生成.so文件(如用到numpy,必须有括号内的内容)

g++ helloworld.cpp -fPIC -shared -o helloworld.so -I. -I/usr/include/python3.8 -I/usr/local/include/boost -L/usr/local/lib -lboost_python3 (-lboost_numpy3)

这里可能会报错

/usr/bin/ld: cannot found -lboost_python3 -lboost_numpy3

解决方案见第4部分

4.链接库

查看/usr/lib/x86_64-linux-gnu下是否有boost安装路径中的lib文件夹下的libboost_system.so和libboost_python3.so之类的关联文件
考虑到后续工作需要在C++和python间传递numpy数组,这里需完成相关依赖库的安装与链接
安装

sudo apt-get install libboost-numpy-dev libboost-python-dev

查看动态链接库是否到环境变量

$ ldconfig -p | grep boost_python
libboost_python38.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_python38.so.1.71.0
libboost_python38.so.1.67.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_python38.so.1.67.0
libboost_python38.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_python38.so
libboost_python27.so.1.67.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_python27.so.1.67.0
$ ldconfig -p | grep boost_numpy 
libboost_numpy38.so.1.71.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_numpy38.so.1.71.0
libboost_numpy38.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libboost_numpy38.so

这里,库名需与编译命令对应,也可通过sudo ln -s命令建立软链接

一点点总结

不得不说,自己安装boost.python库的时候,实在是太麻烦了,踩坑无数。不过,这个库对于C++和Python间数据交互还是肥肠好用的。

参考链接

linux系统安装boost.python
Boost Python 的安装配置以及示例 (支持python3.x)
linux下安装boost python详解
/usr/bin/ld: cannot found -lboost_python 问题解决

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994360.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号