python示例程序演示_boost.python编译及演示样例

昨天编译安装好boost,今天准备使用boost.python写个python调用c++代码的样例,结果踩了非常多坑。

首先贴上代码:

1.student.cpp,一个普通的c++类

#include

#include

using namespace std;

class student

{

public:

void setname(string str)

{

name_ = str;

}

string getname()

{

return name_;

}

void setage(int age)

{

age_ = age;

}

int getage()

{

return age_;

}

private:

string name_;

int age_;

};

2.student2py.cpp,把c++封装成python模块的代码,使用了boost.python

#include

#include "student.cpp"

using namespace boost::python;

BOOST_PYTHON_MODULE(example) //python模块

{

class_("student")

.def("setname",&student::setname)

.def("getname",&student::getname)

.def("setage",&student::setage)

.def("getage",&student::getage)

.add_property("name",&student::getname,&student::setname)

.add_property("age",&student::getage,&student::setage)

;

}

3.makefile

example.so:student.o student2py.o

g++ student2py.o -o example.so -shared -fPIC -I/usr/include/python2.6 -I/home/mjf/lib/include -L/usr/lib/python2.6 -L/home/mjf/lib/lib -lboost_python

student.o:

g++ -c student.cpp -o student.o

student2py.o:student.o

g++ -c student2py.cpp -o student2py.o -fPIC -I/usr/include/python2.6 -I/home/mjf/lib/include

clean:

rm -rf student.o student2py.o

rm -rf example.so

4.example.py,python调用*.so的演示样例代码

import example

stu = example.student()

stu.setname("mjf")

stu.setage(25)

print stu.name

print stu.age

本来以为一帆风顺。结果make的时候出了各种纠结的问题:

1.

../boost/python/detail/wrap_python.hpp:50:23: error: pyconfig.h: No such file or directory

./boost/python/detail/wrap_python.hpp:75:24: error: patchlevel.h: No such file or directory

./boost/python/detail/wrap_python.hpp:78:2: error: #error Python 2.2 or higher is required for

./boost/python/detail/wrap_python.hpp:142:21: error: Python.h: No such file or directory

./boost/python/instance_holder.hpp:34: error: ‘PyObject’ has not been declared

./boost/python/instance_holder.hpp:41: error: expected ‘;’ before ‘(’ token

./boost/python/instance_holder.hpp:45: error: ‘PyObject’ has not been declared

./boost/python/detail/wrapper_base.hpp:21: error: expected initializer before ‘*’ token

./boost/python/detail/wrapper_base.hpp:23: error: expected initializer before ‘*’ token

各种查资料发现是python的问题。

缺少依赖库 python-devel,要安装一下:

sudo yum install python-devel

2.攻克了上面的问题。又发现了新的问题。

/usr/bin/ld: cannot find -lboost_python

一查,果然发现没有libboost_python.so,安装boost的时候我的确是全然安装的。不知道怎么搞的,没装好预计。

又一次装了一下boost.python

./bootstrap.sh --prefix=/home/mjf/lib

sudo ./b2 --with-python install

大功告成,花了接近两个小时解决一些问题。能够成功用python调用example.so

最后:感谢stackoverflow,非常多问题的答案都能在上面找得到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值