c++ python交互之boost.python 简集之普通函数
2011-04-14 18:30
507 查看
我们做的项目测试代码用的是python,但是由于开发用的代码是c++,所以很多交互的地方是需要python调用c++的代码。为此我们将c++的函数打包成.so文件被调用。在实际项目中会遇到各种类型的应用,项目组的郭松同学做了比较详细的总结。我将之收集成文,记录如下,便于自己以后翻阅,也为自己博客添砖加瓦,感谢的话就不说了,如果有朋友因为这篇文章受益,请感谢小松同学。
1.普通函数转换
C++代码: src.cpp
#include <iostream>
#include <string>
using namespace std;
/************************************************ simple method *************************************/
char const* testA()
{
return "just a test";
}
string testB(string str)
{
cout << str << endl;
return str;
}
void testC(string str,int num)
{
cout << "str is : " << str << endl;
cout << "int is : " << num << endl;
}
python 转换代码
: src4py.cpp
#include <boost/python.hpp>
#include "src.cpp"
using namespace boost::python;
BOOST_PYTHON_MODULE(test) //test是python中模块名字
{
def("a", testA);//将testA映射为a 函数
def("b", testB);
def("c", testC);
}
Makefile文件
因为是第一篇将makefile也展示一下,后面文章将不记录Makefile,因为都一样。
/usr/local/boost_143/include/是事先必须准备的库文件。
all:test.so
rm -rf src.o src4py.o
rm -rf cass_pack_factory_src.o cass_pack_Factorysrc4py.o
test.so:src.o src4py.o
g++ src4py.o -o test.so -shared -fPIC -I /usr/local/python/include/python2.5/ -I /usr/local/boost_143/include/ -L /usr/local/python/lib/python2.5/ -L
/usr/local/boost_143/lib/ -lboost_python
src.o:
g++ -c src.cpp -o src.o
src4py.o:src.o
g++ -c src4py.cpp -o src4py.o -fPIC -I /usr/local/python/include/python2.5/ -I /usr/local/boost_143/include/
clean:
rm -rf src.o src4py.o
rm -rf test.so
python 调用代码:
test.py
import test
test.a()
test.b("just a test!")
test.c("call me string!",7)
1.普通函数转换
C++代码: src.cpp
#include <iostream>
#include <string>
using namespace std;
/************************************************ simple method *************************************/
char const* testA()
{
return "just a test";
}
string testB(string str)
{
cout << str << endl;
return str;
}
void testC(string str,int num)
{
cout << "str is : " << str << endl;
cout << "int is : " << num << endl;
}
python 转换代码
: src4py.cpp
#include <boost/python.hpp>
#include "src.cpp"
using namespace boost::python;
BOOST_PYTHON_MODULE(test) //test是python中模块名字
{
def("a", testA);//将testA映射为a 函数
def("b", testB);
def("c", testC);
}
Makefile文件
因为是第一篇将makefile也展示一下,后面文章将不记录Makefile,因为都一样。
/usr/local/boost_143/include/是事先必须准备的库文件。
all:test.so
rm -rf src.o src4py.o
rm -rf cass_pack_factory_src.o cass_pack_Factorysrc4py.o
test.so:src.o src4py.o
g++ src4py.o -o test.so -shared -fPIC -I /usr/local/python/include/python2.5/ -I /usr/local/boost_143/include/ -L /usr/local/python/lib/python2.5/ -L
/usr/local/boost_143/lib/ -lboost_python
src.o:
g++ -c src.cpp -o src.o
src4py.o:src.o
g++ -c src4py.cpp -o src4py.o -fPIC -I /usr/local/python/include/python2.5/ -I /usr/local/boost_143/include/
clean:
rm -rf src.o src4py.o
rm -rf test.so
python 调用代码:
test.py
import test
test.a()
test.b("just a test!")
test.c("call me string!",7)
相关文章推荐
- c++ python交互之boost.python 简集之普通函数
- c++ python交互之boost.python 简集之类成员变量设置
- c++ python交互之boost.python 简集之Map处理
- c++ python交互之boost.python 简集之Map处理
- c++ python交互之boost.python 简集之 vector处理
- c++ python交互之boost.python 简集之 vector处理
- c++ python交互之boost.python 简集之序列化(pickle)
- c++ python交互之boost.python 简集之序列化(pickle)
- c++ python交互之boost.python 简集之Vector(map)混合使用
- c++ python交互之boost.python 简集之Vector(map)混合使用
- c++ python交互之boost.python 简集之类(class , struct)
- c++ python交互之boost.python 简集之类(class , struct)
- c++ python交互之boost.python 简集之类成员变量设置
- C++与Opengl交互 Python与Opnegl交互(使用鼠标函数)
- python嵌入C++------ boost.python如何在C++中调用含有不定长参数tuple变量和关键字参数dict变量的函数
- 利用Boost.Python将C++代码封装为Python模块
- boost.python入门教程 ----python 嵌入c++
- python中staticmethod classmethod及普通函数的区别
- Python 与 C++ 的交互编程
- 在c++中普通函数与 内联函数的区别