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);