使用SWIG将C/C++库移植到其他语言中

SWIG简介

SWIG是一个将C和C++语言程序绑定到其他语言的工具,可以让很多高层次的程序设计语言如脚本语言很方便地调用底层程序。SWIG支持很多的语言如Perl, PHP, Python, Tcl, Ruby, Java, C#, Octave和R等,这些语言在不同程度上支持本地接口调用。利用SWIG,只需写一些接口文件,就可以生成一些用相应语言的本地接口库封装的代码。利用C和C++编译器编译成动态库文件后,就可以直接用高层次的语言调用了。SWIG在很多的跨平台的项目中都得到了广泛的应用,例如Subversion, PyOgre, PyOpenGL, wxPython等。

SWIG的下载与安装

在Ubuntu系统的软件源上有SWIG软件包,可以直接通过以下命令安装。

sudo apt-get install swig

在Windows系统或者其他的Linux版本上,可以下载源代码包,下载地址:http://prdownloads.sourceforge.net/swig/swig-2.0.9.tar.gz

在Linux系统下,解压缩后,运行

./configure
make

编译完成后就可以使用。

在Windows系统下,建议安装MinGW或者Cygwin,使用gcc编译器编译。

准备源文件和接口文件

在运行SWIG之前,首先要准备好C/C++程序的源文件,并编写接口文件。这里采用一个简单的例子,要封装的是一个叫做Example的模块。

swig -java Example.i

我们要导出Example.c文件中所有变量和函数中。如下所示。

/* Example.c */
include <stdio.h>

int integer = 100;

int add(int a, int b)
{
        return a + b;
}

char* getString()
{
        return "Some string";
}

void printLine(const char* str)
{
        printf("%s\n", str);
}

新建一个文件Example.i,输入以下内容:

%module Example

%{
extern int integer;
extern int add(int a, int b);
extern char* getString();
extern void printLine(const char* str);
%}

extern int integer;
extern int add(int a, int b);
extern char* getString();
extern void printLine(const char* str);
&nbsp;

相关推荐