码迷,mamicode.com
首页 > 编程语言 > 详细

boost.python编译及演示样例

时间:2016-04-10 09:04:32      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:

欢迎转载,转载请注明原文地址:http://blog.csdn.net/majianfei1023/article/details/46781581


linux编译boost的链接:http://blog.csdn.net/majianfei1023/article/details/46761029


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

首先贴上代码:

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

#include <iostream>
#include <string>
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 <boost/python.hpp>
#include "student.cpp"
using namespace boost::python;
BOOST_PYTHON_MODULE(example)  //python模块
{
class_<student>("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,非常多问题的答案都能在上面找得到。



boost.python编译及演示样例

标签:

原文地址:http://www.cnblogs.com/bhlsheji/p/5373344.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!