用boost封装C++的库供Python调用
2017-03-26 18:38
495 查看
用boost封装C++的库供Python调用
在网上查了一些教程,基本都是一些比较老的教程,在 boost 1.63.0 中无法使用,因此研读了boost的手册,一些笔记记录如下。测试环境
OS:Windows10 x64Python2.7 x64:Anaconda2 4.3.1
Boost 1.63.0 x64
dll工程配置
添加boost和Python头文件路径:“D:\boost_1_63_0\;D:\Anaconda2\include ”添加boost和Python 链接器附加库目录: “D:\boost_1_63_0\lib64-msvc-14.0;D:\Anaconda2\libs ”
添加boost和Python 附加库文件:
python27.lib
libboost_atomic-vc140-mt-1_63.lib
libboost_atomic-vc140-mt-gd-1_63.lib
libboost_atomic-vc140-mt-s-1_63.lib
libboost_atomic-vc140-mt-sgd-1_63.lib
libboost_bzip2-vc140-mt-1_63.lib
libboost_bzip2-vc140-mt-gd-1_63.lib
libboost_bzip2-vc140-mt-s-1_63.lib
libboost_bzip2-vc140-mt-sgd-1_63.lib
libboost_bzip2-vc140-s-1_63.lib
libboost_bzip2-vc140-sgd-1_63.lib
libboost_chrono-vc140-mt-1_63.lib
libboost_chrono-vc140-mt-gd-1_63.lib
libboost_chrono-vc140-mt-s-1_63.lib
libboost_chrono-vc140-mt-sgd-1_63.lib
libboost_chrono-vc140-s-1_63.lib
libboost_chrono-vc140-sgd-1_63.lib
libboost_container-vc140-mt-1_63.lib
libboost_container-vc140-mt-gd-1_63.lib
libboost_container-vc140-mt-s-1_63.lib
libboost_container-vc140-mt-sgd-1_63.lib
libboost_container-vc140-s-1_63.lib
libboost_container-vc140-sgd-1_63.lib
libboost_context-vc140-mt-1_63.lib
libboost_context-vc140-mt-gd-1_63.lib
libboost_context-vc140-mt-s-1_63.lib
libboost_context-vc140-mt-sgd-1_63.lib
libboost_coroutine-vc140-mt-1_63.lib
libboost_coroutine-vc140-mt-gd-1_63.lib
libboost_coroutine-vc140-mt-s-1_63.lib
libboost_coroutine-vc140-mt-sgd-1_63.lib
libboost_coroutine-vc140-s-1_63.lib
libboost_coroutine-vc140-sgd-1_63.lib
libboost_date_time-vc140-mt-1_63.lib
libboost_date_time-vc140-mt-gd-1_63.lib
libboost_date_time-vc140-mt-s-1_63.lib
libboost_date_time-vc140-mt-sgd-1_63.lib
libboost_date_time-vc140-s-1_63.lib
libboost_date_time-vc140-sgd-1_63.lib
libboost_exception-vc140-mt-1_63.lib
libboost_exception-vc140-mt-gd-1_63.lib
libboost_exception-vc140-mt-s-1_63.lib
libboost_exception-vc140-mt-sgd-1_63.lib
libboost_exception-vc140-s-1_63.lib
libboost_exception-vc140-sgd-1_63.lib
libboost_fiber-vc140-mt-1_63.lib
libboost_fiber-vc140-mt-gd-1_63.lib
libboost_fiber-vc140-mt-s-1_63.lib
libboost_fiber-vc140-mt-sgd-1_63.lib
libboost_filesystem-vc140-mt-1_63.lib
libboost_filesystem-vc140-mt-gd-1_63.lib
libboost_filesystem-vc140-mt-s-1_63.lib
libboost_filesystem-vc140-mt-sgd-1_63.lib
libboost_filesystem-vc140-s-1_63.lib
libboost_filesystem-vc140-sgd-1_63.lib
libboost_graph-vc140-mt-1_63.lib
libboost_graph-vc140-mt-gd-1_63.lib
libboost_graph-vc140-mt-s-1_63.lib
libboost_graph-vc140-mt-sgd-1_63.lib
libboost_graph-vc140-s-1_63.lib
libboost_graph-vc140-sgd-1_63.lib
libboost_iostreams-vc140-mt-1_63.lib
libboost_iostreams-vc140-mt-gd-1_63.lib
libboost_iostreams-vc140-mt-s-1_63.lib
libboost_iostreams-vc140-mt-sgd-1_63.lib
libboost_iostreams-vc140-s-1_63.lib
libboost_iostreams-vc140-sgd-1_63.lib
libboost_locale-vc140-mt-1_63.lib
libboost_locale-vc140-mt-gd-1_63.lib
libboost_locale-vc140-mt-s-1_63.lib
libboost_locale-vc140-mt-sgd-1_63.lib
libboost_log-vc140-mt-1_63.lib
libboost_log-vc140-mt-gd-1_63.lib
libboost_log-vc140-mt-s-1_63.lib
libboost_log-vc140-mt-sgd-1_63.lib
libboost_log-vc140-s-1_63.lib
libboost_log-vc140-sgd-1_63.lib
libboost_log_setup-vc140-mt-1_63.lib
libboost_log_setup-vc140-mt-gd-1_63.lib
libboost_log_setup-vc140-mt-s-1_63.lib
libboost_log_setup-vc140-mt-sgd-1_63.lib
libboost_log_setup-vc140-s-1_63.lib
libboost_log_setup-vc140-sgd-1_63.lib
libboost_math_c99-vc140-mt-1_63.lib
libboost_math_c99-vc140-mt-gd-1_63.lib
libboost_math_c99-vc140-mt-s-1_63.lib
libboost_math_c99-vc140-mt-sgd-1_63.lib
libboost_math_c99-vc140-s-1_63.lib
libboost_math_c99-vc140-sgd-1_63.lib
libboost_math_c99f-vc140-mt-1_63.lib
libboost_math_c99f-vc140-mt-gd-1_63.lib
libboost_math_c99f-vc140-mt-s-1_63.lib
libboost_math_c99f-vc140-mt-sgd-1_63.lib
libboost_math_c99f-vc140-s-1_63.lib
libboost_math_c99f-vc140-sgd-1_63.lib
libboost_math_c99l-vc140-mt-1_63.lib
libboost_math_c99l-vc140-mt-gd-1_63.lib
libboost_math_c99l-vc140-mt-s-1_63.lib
libboost_math_c99l-vc140-mt-sgd-1_63.lib
libboost_math_c99l-vc140-s-1_63.lib
libboost_math_c99l-vc140-sgd-1_63.lib
libboost_math_tr1-vc140-mt-1_63.lib
libboost_math_tr1-vc140-mt-gd-1_63.lib
libboost_math_tr1-vc140-mt-s-1_63.lib
libboost_math_tr1-vc140-mt-sgd-1_63.lib
libboost_math_tr1-vc140-s-1_63.lib
libboost_math_tr1-vc140-sgd-1_63.lib
libboost_math_tr1f-vc140-mt-1_63.lib
libboost_math_tr1f-vc140-mt-gd-1_63.lib
libboost_math_tr1f-vc140-mt-s-1_63.lib
libboost_math_tr1f-vc140-mt-sgd-1_63.lib
libboost_math_tr1f-vc140-s-1_63.lib
libboost_math_tr1f-vc140-sgd-1_63.lib
libboost_math_tr1l-vc140-mt-1_63.lib
libboost_math_tr1l-vc140-mt-gd-1_63.lib
libboost_math_tr1l-vc140-mt-s-1_63.lib
libboost_math_tr1l-vc140-mt-sgd-1_63.lib
libboost_math_tr1l-vc140-s-1_63.lib
libboost_math_tr1l-vc140-sgd-1_63.lib
libboost_prg_exec_monitor-vc140-mt-1_63.lib
libboost_prg_exec_monitor-vc140-mt-gd-1_63.lib
libboost_prg_exec_monitor-vc140-mt-s-1_63.lib
libboost_prg_exec_monitor-vc140-mt-sgd-1_63.lib
libboost_prg_exec_monitor-vc140-s-1_63.lib
libboost_prg_exec_monitor-vc140-sgd-1_63.lib
libboost_program_options-vc140-mt-1_63.lib
libboost_program_options-vc140-mt-gd-1_63.lib
libboost_program_options-vc140-mt-s-1_63.lib
libboost_program_options-vc140-mt-sgd-1_63.lib
libboost_program_options-vc140-s-1_63.lib
libboost_program_options-vc140-sgd-1_63.lib
libboost_python-vc140-mt-1_63.lib
libboost_python-vc140-mt-gd-1_63.lib
libboost_python-vc140-mt-s-1_63.lib
libboost_python-vc140-mt-sgd-1_63.lib
libboost_python-vc140-s-1_63.lib
libboost_python-vc140-sgd-1_63.lib
libboost_random-vc140-mt-1_63.lib
libboost_random-vc140-mt-gd-1_63.lib
libboost_random-vc140-mt-s-1_63.lib
libboost_random-vc140-mt-sgd-1_63.lib
libboost_random-vc140-s-1_63.lib
libboost_random-vc140-sgd-1_63.lib
libboost_regex-vc140-mt-1_63.lib
libboost_regex-vc140-mt-gd-1_63.lib
libboost_regex-vc140-mt-s-1_63.lib
libboost_regex-vc140-mt-sgd-1_63.lib
libboost_regex-vc140-s-1_63.lib
libboost_regex-vc140-sgd-1_63.lib
libboost_serialization-vc140-mt-1_63.lib
libboost_serialization-vc140-mt-gd-1_63.lib
libboost_serialization-vc140-mt-s-1_63.lib
libboost_serialization-vc140-mt-sgd-1_63.lib
libboost_serialization-vc140-s-1_63.lib
libboost_serialization-vc140-sgd-1_63.lib
libboost_signals-vc140-mt-1_63.lib
libboost_signals-vc140-mt-gd-1_63.lib
libboost_signals-vc140-mt-s-1_63.lib
libboost_signals-vc140-mt-sgd-1_63.lib
libboost_signals-vc140-s-1_63.lib
libboost_signals-vc140-sgd-1_63.lib
libboost_system-vc140-mt-1_63.lib
libboost_system-vc140-mt-gd-1_63.lib
libboost_system-vc140-mt-s-1_63.lib
l
4000
ibboost_system-vc140-mt-sgd-1_63.lib
libboost_system-vc140-s-1_63.lib
libboost_system-vc140-sgd-1_63.lib
libboost_test_exec_monitor-vc140-mt-1_63.lib
libboost_test_exec_monitor-vc140-mt-gd-1_63.lib
libboost_test_exec_monitor-vc140-mt-s-1_63.lib
libboost_test_exec_monitor-vc140-mt-sgd-1_63.lib
libboost_test_exec_monitor-vc140-s-1_63.lib
libboost_test_exec_monitor-vc140-sgd-1_63.lib
libboost_thread-vc140-mt-1_63.lib
libboost_thread-vc140-mt-gd-1_63.lib
libboost_thread-vc140-mt-s-1_63.lib
libboost_thread-vc140-mt-sgd-1_63.lib
libboost_timer-vc140-mt-1_63.lib
libboost_timer-vc140-mt-gd-1_63.lib
libboost_timer-vc140-mt-s-1_63.lib
libboost_timer-vc140-mt-sgd-1_63.lib
libboost_timer-vc140-s-1_63.lib
libboost_timer-vc140-sgd-1_63.lib
libboost_type_erasure-vc140-mt-1_63.lib
libboost_type_erasure-vc140-mt-gd-1_63.lib
libboost_type_erasure-vc140-mt-s-1_63.lib
libboost_type_erasure-vc140-mt-sgd-1_63.lib
libboost_type_erasure-vc140-s-1_63.lib
libboost_type_erasure-vc140-sgd-1_63.lib
libboost_unit_test_framework-vc140-mt-1_63.lib
libboost_unit_test_framework-vc140-mt-gd-1_63.lib
libboost_unit_test_framework-vc140-mt-s-1_63.lib
libboost_unit_test_framework-vc140-mt-sgd-1_63.lib
libboost_unit_test_framework-vc140-s-1_63.lib
libboost_unit_test_framework-vc140-sgd-1_63.lib
libboost_wave-vc140-mt-1_63.lib
libboost_wave-vc140-mt-gd-1_63.lib
libboost_wave-vc140-mt-s-1_63.lib
libboost_wave-vc140-mt-sgd-1_63.lib
libboost_wserialization-vc140-mt-1_63.lib
libboost_wserialization-vc140-mt-gd-1_63.lib
libboost_wserialization-vc140-mt-s-1_63.lib
libboost_wserialization-vc140-mt-sgd-1_63.lib
libboost_wserialization-vc140-s-1_63.lib
libboost_wserialization-vc140-sgd-1_63.lib
libboost_zlib-vc140-mt-1_63.lib
libboost_zlib-vc140-mt-gd-1_63.lib
libboost_zlib-vc140-mt-s-1_63.lib
libboost_zlib-vc140-mt-sgd-1_63.lib
libboost_zlib-vc140-s-1_63.lib
libboost_zlib-vc140-sgd-1_63.lib
C++ demo源代码
// helloBoostPython.cpp : 定义 DLL 应用程序的导出函数。 // #include "stdafx.h" // 头文件引用 #include <boost/python.hpp> /*******************************1、简单函数********************************/ char const* greet(){ return "hello, world"; } /*******************************2、简单类**********************************/ struct World{ World(std::string msg) : msg(msg) {} // added constructor void setstr(std::string msg) { this->msg = msg; } std::string greet() { return msg; } std::string msg; std::string const name; float value; float get() { return this->value; } void set(float value) { this->value = value; } }; /******************************3、继承和派生********************************/ struct Base { virtual ~Base() { ; } }; struct Derived : Base {};//继承于Base void b(Base*); void d(Derived*); Base* factory() { return new Derived; } /*******************************4、运算符重载********************************/ class FilePos { /*...*/ }; FilePos operator+(FilePos, int) {} FilePos operator+(int, FilePos) {} int operator-(FilePos, FilePos) {} FilePos operator-(FilePos, int) {} FilePos& operator+=(FilePos&, int) {} FilePos& operator-=(FilePos&, int) {} bool operator<(FilePos, FilePos) {} /****************************把C++程序封装为Python可调用的程序***************/ BOOST_PYTHON_MODULE(helloBoostPython){ using namespace boost::python; /*******************************1、简单函数********************************/ def("greet", greet); /*******************************2、简单类**********************************/ class_<World>("World", init<std::string>())//init构造函数 .def("greet", &World::greet)//不带参数的方法 .def("setstr", &World::setstr)//带参数的方法 .def_readonly("name", &World::name)//只读成员变量 .def_readwrite("value", &World::value)//可读写成员变量 .add_property("readonlyvalue", &World::get)//给Python中的类添加只读属性 .add_property("value", &World::get, &World::set);//给Python中的类添加读写属性 /******************************3、继承和派生********************************/ //基类 class_<Base>("Base"); //继承的类 class_<Derived, bases<Base> >("Derived"); //关于继承的类的函数 def("b", b);//基类指针作为参数的函数 def("d", d);//派生指针作为参数的函数 def("factory", factory);//返回值为派生类指针的函数 /*******************************4、运算符重载********************************/ class_<FilePos>("FilePos") .def(self + int()) // __add__ .def(int() + self) // __radd__ .def(self - self) // __sub__ .def(self - int()) // __sub__ .def(self += int()) // __iadd__ .def(self -= other<int>()) .def(self < self); // __lt__ }
生成和调用
生成工程,将生成的目标文件 “helloBoostPython.dll ”修改为 “helloBoostPython.pyd ”新建 hello.py ,测试代码
# -*- coding:utf-8 -*- import helloBoostPython # 简单函数 print helloBoostPython.greet() # 简单类 planet = helloBoostPython.World("xm") print planet.greet() # 略...
更多用法参考boost docs
相关文章推荐
- Python调用采用Boost Python封装的c++(2)
- Python调用采用Boost Python封装的c++
- Python调用采用Boost Python封装的c++(2)
- 利用boost.python封装C++函数供python调用
- 使用boost实现python调用c++
- 使用boost.python在python调用C++接口(windows)
- 如何在C++代码中调用python代码(MinGW+Boost.Python)
- Python调用C/C++的接口(Boost)
- swig 把c/c++ 封装成python可调用的so文动态链接库
- PY++ 自动将你的C++程序接口封装供python调用
- Boost.Python实现C++与Python互调用
- Boost.Python实现C++与Python互调用
- PY++ 自动将你的C++程序接口封装供python调用
- 使用boost实现c++与python的相互调用
- 利用Boost.Python将C++代码封装为Python模块
- c++调用Python [boost::python]
- 如何在C++代码中调用python代码(MinGW+Boost.Python)
- python嵌入C++------ boost.python如何在C++中调用含有不定长参数tuple变量和关键字参数dict变量的函数
- boost.python,在python中调用c++接口注意的问题(python2.5.4)
- 通过SWIG封装C/C++代码被Python调用