用swig包装一个大图书馆

时间:2014-10-15 13:17:50

标签: c++ wrapper swig

我有一个相当复杂的模板化C ++库, 拥有数百个类和数千行代码。 唯一的外部依赖是提升。 我想从R,python等访问这个库。

从我读到的内容来看,swig似乎是要走的路。 但是教程似乎只使用了一个二进制文件 通过编写相应的.i文件。 现在为每个类和文件写一个.i文件 手头的图书馆可能需要数周时间,如果没有的话 月。现在,这不是一个选择。

所以我的问题:

  • 是否有任何实用教程可以“sw'”一大片 预先存在的图书馆?

  • 可以或多或少地自动生成这些.i文件吗?

  • 如果没有,还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

我没有看到任何很棒的教程,但SWIG文档很不错。

SWIG不生成.i文件,但有许多有用的预编码.i文件。例如,windows.i用于Windows类型支持,std_vector.i用于std :: vector C ++支持等。

SWIG会处理.h文件,因此您不必为所有类手动编写包装器。像下面这样的简单.i文件将为您完成大部分工作。

%module mylib
%{
#include "mylib.h"
%}

%include <windows.i> // If on windows...
%include "mylib.h"

如果您的类和方法具有参数和返回值的标准类型,则它可能“正常工作”。但更复杂的类型可能需要额外的包含,模板实例化或手写类型映射。

包装C ++库的另一种选择是boost::Python,但我自己没有玩过它。