利用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部分
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