利用boost.python把c++程序编译成python可用形式

利用boost.python把c++程序编译成python可用形式

yanjie@20181122

准备工作

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

开始编码

C++部分

test4boost.h:

#include <iostream>
#include <string>
using namespace std;
class Test4Boost
{
private:
    std::string str;
    int i;
public:
    Test4Boost(const string s, int i);
    string echo(const string s);
};
void only4test();

test4boost.cpp:

#include "test4boost.h"
#include <boost/python.hpp>
using namespace boost::python;
Test4Boost::Test4Boost(const string s, int i)
{
    this->str = s;
    this->i = i;
}
string Test4Boost::echo(const string s)
{
    return this->str + s;
}
void only4test()
{
    cout << "only4test" << endl;
}

//主要加入以下代码,用于支持python
BOOST_PYTHON_MODULE(test4boost) //so文件名
{
    class_<Test4Boost/* 类名 */>("Test4Boost", init<const string, int>()) // init里面就是放构造函数的参数,不需要实参
    .def("echo", &Test4Boost::echo); //导出类中的方法,不需要参数

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

Makefile:

CC = g++
CFLAG = -fPIC -std=c++11 -I. -I/usr/include/python3.5m
LIBS = -lboost_python-py35 -lpython3.5m
TARGET = test4boost.so
SRC = test4boost.cpp
$(TARGET): $(SRC)
    $(CC) -shared -o $@ $^ $(CFLAG) $(LIBS)

在C++代码目录输入:

make

会生成so文件:test4boost.so

python部分

test.py:

import test4boost

test4boost.only4test()

tb = test4boost.Test4Boost("test python", 123)
print(tb.echo("hahaha"))

执行python:python3 test.py
输出如下:

usr01@dovm2:~/yanjie/ctest/test4boost$ python3 test.py 
only4test
test pythonhahaha
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值