2011-11-14 99 views
3

我有一个库和一些头文件,没有C++源代码,我想用它与python。 我试过py ++,但是gccxml报告错误。 我试过swig,但有些许多“未定义符号”错误。 有没有一些智能工具可以自动做这样的事情?如何为python包装一个C++库?

+1

swig ++,boost python – sehe

回答

2

你可以尝试使用boost python

你需要创建一个简单的包装DLL链接到你原来的库,包含类似下面的代码(假设你要导出一个名为LibraryClass类2个功能,FOO &吧)

#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++定义在头文件和为你做的辛勤工作,但依据升压蟒蛇页面这里不再维持,所以我我不确定它的工作效果。

+0

自动代码生成器使用gccxml,但gccxml报告头文件中存在一些错误。 – WhatisThat

+0

您可以尝试发布关于您从gccxml获得的错误的单独问题。也许有人可以帮助。 – obmarg

0

这种方法需要一点工作,如果你有很多函数,你想要打包/函数使用很多C++内在类型作为参数/返回值,可能是不可行的。

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

+0

也许,这个想法并不坏。谢谢你 – WhatisThat