【发布时间】:2011-11-14 20:42:23
【问题描述】:
我有一个库和一些头文件,没有 c++ 源代码,我想将它与 python 一起使用。 我试过py++,但是gccxml报错。 我试过痛饮,但有很多“未定义的符号”错误。 有没有一些智能工具可以自动完成这些事情?
【问题讨论】:
我有一个库和一些头文件,没有 c++ 源代码,我想将它与 python 一起使用。 我试过py++,但是gccxml报错。 我试过痛饮,但有很多“未定义的符号”错误。 有没有一些智能工具可以自动完成这些事情?
【问题讨论】:
你可以试试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 页面,这不再维护,所以我不确定它有多好有效。
【讨论】:
这种方法需要做一些工作,如果您有很多要包装的函数/这些函数使用大量 c++ 内在类型作为参数/返回值,则这种方法可能不可行。
如果不是这样,你可以定义一些 c-wrapper 函数,在它们前面加上“extern c”关键字,带有纯 c 参数和返回类型。编译并将“包装函数”链接到您的 c++ 库。然后你可以使用 ctypes 模块(来自 python)来调用你的包装函数,然后再调用你库中的 c++ 函数。
【讨论】: