如何为Python封装C++库?
我有一个库和一些头文件,但没有C++的源代码,我想用Python来使用它。
我试过py++,但是gccxml报错。
我也试过swig,但出现了很多“未定义符号”的错误。
有没有什么聪明的工具可以自动完成这些工作?
3 个回答
0
这种方法需要花一些功夫,如果你有很多函数需要处理,或者这些函数使用了很多C++的内置类型作为参数或返回值,那可能就不太现实了。
如果情况不是这样,你可以定义一些C语言的包装函数,在它们前面加上“extern c”这个关键词,使用纯C的参数和返回类型。然后把这些“包装函数”编译并链接到你的C++库中。接着,你就可以使用Python中的ctypes模块来调用这些包装函数,而这些包装函数又会去调用你库中的C++函数。
2
你可以试试使用 boost python。
你需要创建一个简单的包装库(dll),这个库要链接到你原来的库,里面的代码大概是这样的(假设你想导出一个叫做 LibraryClass 的类,并且这个类有两个函数,foo 和 bar):
#include <librarytowrap.h>
#include <boost/python.hpp>
using namespace boost::python;
BOOST_PYTHON_MODULE(Library)
{
class_<LibraryClass>("LibraryClass")
.def("foo", &LibraryClass::foo)
.def("bar", &LibraryClass::bar)
;
}
你可能还可以使用 自动代码生成器,它可以读取头文件中的 C++ 定义,帮你完成一些复杂的工作。不过根据 boost python 的页面,这个工具现在已经不再维护了,所以我不太确定它的效果如何。