swig开始使用swig


备注

SWIG (Simplified Wrapper和Interface Generator)是一种用于将C和C ++代码包装在各种目标语言中的工具,允许C / C ++ API用于其他语言。

SWIG解析头文件并以依赖于目标语言的方式生成代码。代码生成可以由SWIG接口文件中的开发人员以及命令行选项控制。

在接口文件中,开发人员告诉SWIG要包装的内容和方式。 SWIG有自己的预处理器系统和许多特殊指令来控制数据,类和函数如何包装在目标语言中。其中一些指令是通用的,另一些是特定于目标语言的指令。

中央如何SWIG功能是类型映射 。类型映射是指定如何在C代码和目标语言之间封送类型的规则。字体映射可以全局应用于接口文件中的所有内容,也可以根据具体情况在本地应用。如有必要,也可以定制它们。

一旦SWIG在接口文件上运行,它就会生成一个C或C ++文件,它就是包装器。该文件应该与C / C ++程序或静态库进行编译和链接,包装器用于与之交互以生成共享库。该库反过来由目标语言使用。

RTFM

SWIG已经附带了一本优秀的文档手册 ,这一点无法得到足够的重视。这一方面非常详细,涵盖了安装 ,并以代码片段的形式提供了许多具体示例,包括完整的“hello world” SWIG示例

但最重要的是,它还解释了1.7如何避免阅读手册

如果你讨厌阅读手册,请看一下“ 简介 ”,其中包含一些简单的例子。这些示例包含使用SWIG需要了解的所有内容的95%。之后,只需使用特定于语言的章节作为参考。 SWIG发行版还附带了一个说明不同主题的大型示例目录。

你好,世界

使用SWIG的最小示例。

HelloWorld.i ,SWIG接口文件

%module helloworld    //the name of the module SWIG will create
%{                    //code inside %{...%} gets inserted into the wrapper file
#include "myheader.h" //helloworld_wrap.cxx includes this header
%}

%include "myheader.h"   //include the header for SWIG to parse
 

然后,在命令行中

swig -c++ -java HelloWorld.i
 

这意味着我们将Java作为HelloWorld.i指定的目标语言包装C ++(而不是C)。这将生成一个C ++文件helloworld_wrap.cxx,它具有包装代码。该文件应该被编译并链接到包装器应该与之接口的任何代码(例如,静态库)以产生共享库。对于某些语言,与我们示例中的Java一样,将生成其他代码 - 在我们的示例中,将至少有一个Java类文件。

安装或设置

有关设置或安装swig的详细说明。