如何使用 SWIG 在 C++ API 上生成 C 包装器? [复制]

Posted

技术标签:

【中文标题】如何使用 SWIG 在 C++ API 上生成 C 包装器? [复制]【英文标题】:How can I generate C wrappers over C++ API using SWIG? [duplicate] 【发布时间】:2011-11-28 23:19:53 【问题描述】:

我想使用 SWIG 在一些 C++ API 上生成 C 包装器。

来自 SWIG 文档SWIG and C++:

6.2 方法

为了封装 C++,SWIG 使用分层方法来生成代码。在最低级别,SWIG 生成程序 ANSI-C 样式包装器的集合。这些包装器照顾 基本类型转换、类型检查、错误处理和其他底层细节 C++ >绑定。这些包装器也足以将 C++ 绑定到任何目标语言 支持内置程序。在某种意义上,您可能会将这一层包裹视为 为 C++ 提供 C 库接口。

但是,如果不生成代码以在 Python、Ruby 等语言中使用 API,我看不到任何选项可以做到这一点。我怎样才能只获得 C 包装器?

【问题讨论】:

【参考方案1】:

虽然 SWIG 的主分支无法为 C++ API 生成 C 包装器(问题中引用的 SWIG 文档有点误导),但在 2008 年 Google Summer of Code 期间创建了一个 SWIG 分支,可在 https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-maciekd/ 找到它确实只是。我在这里找到了答案:C++ to C Wrapper using SWIG (for FLTK)

【讨论】:

值得注意的是,正如here 所述,今年(2012 年)还有另一个 GSOC 项目。它还没有完成,但希望这次能实现。

以上是关于如何使用 SWIG 在 C++ API 上生成 C 包装器? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

SWIG 在 Windows 中生成 C++ Python3 包装器导致断言 MSVC 2017

使用 SWIG 在 Python 中访问 C++ typedef

如何使用 SWIG 从 C++ 调用 Java?

在mac上生成音调/正弦波的简单方法? (红宝石会很好)

C++如何只在堆上或者栈上生成对象

在 swig 接口文件中没有调用 C++ 析构函数