如何为python包装c ++库?

时间:2011-11-14 09:52:59

标签: c++ python

我有一个库和一些头文件,没有c ++源代码,我想用python来使用它。 我试过py ++,但gccxml报告错误。 我试过swig,但有一些“未定义的符号”错误。 是否有一些智能工具可以自动完成这些工作?

3 个答案:

答案 0 :(得分:2)

您可以尝试使用boost python

您需要创建一个链接到原始库的简单包装器DLL,其中包含与此类似的代码(假设您要导出一个名为LibraryClass的类,其中包含2个函数,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)
    ;
}

您可以使用the automatic code generator来读取头文件中的C ++定义并为您做好工作,但根据boost python页面不再维护,所以我不确定如何它有效。

答案 1 :(得分:1)

你能不能只使用python ctypes包?

请参阅此tutorial

答案 2 :(得分:0)

这种方法需要一些工作,如果你有很多函数可能不可行,你想要包装/函数使用很多c ++内部类型作为参数/返回值。

如果不是这种情况,你可以定义一些c-wrapper函数,在它们前面加上“extern c”关键字,使用纯c参数和返回类型。编译并将“包装函数”链接到c ++库。然后你可以使用ctypes模块(来自python)来调用你的包装器函数,然后调用你的库中的c ++函数。