文章目录在安装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++代码封装库后会报错,查了相关资料似乎是系统架构问题???)
在安装boost之前需要检查系统中是否已经安装boost库,若系统中存在则需要卸载干净。(不然要出大问题。。。
(1)包管理器安装方式的检查 卸载| 系统类别 | 检查命令 |
|---|---|
| redhat | rpm -qf /usr/include/boost/version.hpp |
| debian | dpkg -S /usr/include/boost/version.hpp |
检查到了则需卸载:
| 系统类别 | 卸载命令 |
|---|---|
| redhat | sudo yum remove libboost***-dev |
| debian | sudo 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的头文件和库文件
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)更新连接库
ldconfig3.代码编译方法
编译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 问题解决



