linux系统安装boost.python

 

目的:linux系统下特定python版本调用c++,需要安装boost库。python调用c的方式还有python自带的cpython模块,可以直接调用C编译后的.so动态库(或者windows下的.dll)。此处未使用该模块,而是直接使用boost库。

1,注意检查系统是否有boost,如果有,可以查看版本,非编译安装的boost一般会调用默认的python版本。我的linux系统下默认版本是python2.7,需要用的python为3.6。则先将以前boost版本卸载,查看boost版本。

dpkg -S /usr/include/boost/version.hpp

卸载对应版本,**表示版本号。

sudo apt-get autoremove libboost**-dev

 

boost官网,下载最新版本boost,如我的boost在opt下并进入安装文件夹,找到user_config.jam文件,编辑加入using mpi,保存。

2,采用root用户,进入安装包目录下。

sudo -i
cd /opt/boost_1_66_0

3,找到python的安装位置,一般在usr/bin/下,对应要安装的版本。--prefix表示boost安装的路径,可指定该路径。

./bootstrap.sh --prefix=/usr/local/boost --with-libraries=all --with-python=/usr/bin/python3.6m

运行bootstrap.sh完成后,有系统界面会提示需要进入project_config.jam界面加入python的相关路径,可以加入python的路径  

vim project-config.jam

在project-config.jam中python对应的地方加入指定版本的python的include和lib。

using python : 3.6 : /usr/bin/python3.6m : /usr/include/python3.6m : /usr/lib/python3.6 ;

4,编译及指定python版本安装,并用--prefix指定boost安装位置。

./b2
./b2 install --with-python include="/usr/include/python3.6m"  

5,安装完成后,更新,添加boost路径,在profile添加。

vim /etc/profile #添加安装boost的路径

6,运行环境

source /etc/profile

7,更新连接库

ldconfig #更新动态连接库

以上安装完成。注意:安装完成后,要重启一下linux,否则容易出现各种编译不成功的问题。

查看/usr/lib/x86_64-linux-gnu下是否有boost安装路径中的lib文件夹下的libboost_system.so和libboost_python3.so之类的关联文件,如果没有,则可以直接copy到对应文件夹下。

测试boost。

1)运用网络找到的heloworld.cpp文件,测试有效。cpp文件如下

#include 
#include 
#include   // 必须引入这个头文件

using namespace boost::python;

class HelloWorld{
public:
    HelloWorld(const std::string& name, int age);

    void printInfo();

private:
    std::string m_name;
    int m_age;
};

HelloWorld::HelloWorld(const std::string& name, int age):m_name(name), m_age(age){

}

void HelloWorld::printInfo(){
    std::cout << "我叫" << m_name << ", " << m_age << "岁了" << std::endl;
}

void ceshi(){
    std::cout << "ceshi" << std::endl;
}

BOOST_PYTHON_MODULE(helloworld){
    // 类导出成Python可调用的动态链接库文件的方式
    class_
            ("helloworld", init())//导出类中的方法
            .def("printinfo", &HelloWorld::printInfo);

    // 普通函数导出成Python可调用的动态链接库文件的方式
    def("ceshi",&ceshi);
}

2)编译生成.so文件。也可以在jupyter-lab下编写makefile文件,输入下列语句,然后执行!make。则可以在文件夹下看到对应的.so文件。

g++ helloworld.cpp -fPIC -shared -o helloworld.so -I. -I/usr/include/python3.6m -I/usr/local/include/boost -L/usr/local/lib -lboost_python3

3)终端进入python3.6。如果是在jupyter-lab里,则可以省略此步骤。

python3.6

4),可以直接调用编译的helloworld.so文件。如果在jupyter-lab中,则可以直接输入,最终可以在终端看到输出。

import helloworld
hw = helloworld.helloworld("lanyulei", 18)
hw.printinfo()

 

你可能感兴趣的:(python,linux,c++)