SWIG是一個軟件開發工具,連接用C和c++編寫的程序和各種高級程序設計語言。SWIG是使用不同類型的目標語言包括常見腳本語言如Javascript、Perl、PHP、Python、Tcl和Ruby。支持的語言列表還包括non-scripting c#等語言,Common Lisp(CLISP,快板CL,CFFI UFFI),D,語言,Java,Lua,Modula-3,OCAML和八度,R和Scilab。還幾個解釋和編譯計劃實現(詭計,MzScheme /球拍、雞肉)支持。
SWIG最常用于創建高層解釋或編譯的編程環境,用戶界面,并作為測試和原型工具C / c++軟件。SWIG通常用于解析C / c++接口并生成所需的粘合代碼的上述目標語言調用C / c++代碼。SWIG還可以導出的解析樹的XML和Lisp s-expressions形式。
swig功能特性
代碼生成
SWIG目前支持20三個不同的目標語言生成包裝器代碼:
Allegro CL
C#
CFFI
CLISP
Chicken
D
Go
Guile
Java
Javascript
Lua
Modula-3
Mzscheme
OCAML
Octave
Perl
PHP
Python
R
Ruby
Scilab
Tcl
UFFI
此外,可以導出為XML解析樹和Lisp s-expressions。 實驗工作也可用于派克模塊。
ISO C
SWIG包裝所有ISO C99的能力。 功能包括:
的處理 所有 ISO C數據類型。
全局函數、全局變量和常量。
結構和工會。
指針。
數組和多維數組。
指向函數的指針。
可變長度參數。
類型定義。
枚舉。
ISO C + +
SWIG提供包裝支持ISO C + + 11。
所有c++數據類型。
引用。
指向成員的指針。
類。
繼承和多重繼承。
重載的函數和方法(使用動態調度)。
重載操作符。
靜態成員。
名稱空間(包括使用聲明、別名、嵌套等)。
模板
嵌套類
成員模板
模板特殊化和局部特殊化。
智能指針
c++庫支持字符串和STL。
大多數新的c++ 11標準特性。
c++用戶依賴于先進的模板編程技術 (如。 模板元編程),也應該意識到SWIG 目前需要手動所有模板類的實例化。 因此,如果您的應用程序包含50000年的實例化 模板類,你的情況可能不同。
預處理
SWIG為一個完整的C預處理器提供了以下功能:
宏擴展。
自動包裝#語句定義為常量(適用時)。
支持C99(可變宏擴展)。
自定義特性
SWIG提供控制的大多數方面包裝器生成。 大多數 這些定制選項完全集成到c++類型 系統,便于應用定制在繼承 層次結構,模板實例化等等。 功能包括:
自定義類型轉換/編組。
異常處理。
類/結構擴展。
內存管理。
消除歧義。
模板實例化。
文件導入和跨模塊連接。
代碼包含helper函數支持。
廣泛的診斷(錯誤/警告消息包括細粒警告鎮壓)。
擴展SWIG宏觀處理。
swig 怎么用
swig python 安裝使用教程
假設你有你想要的C函數添加到Tcl、Perl、Python、Java和c#。 具體來說,假設你有一個文件“example.c”
/* File : example.c */
#include <time.h>
double My_variable = 3.0;
int fact(int n) {
if (n <= 1) return 1;
else return n*fact(n-1);
}
int my_mod(int x, int y) {
return (x%y);
}
char *get_time()
{
time_t ltime;
time(<ime);
return ctime(<ime);
}
接口文件
現在,為了將這些文件添加到您最喜愛的語言,你需要寫一個 “接口文件”,這是SWIG的輸入。 一個接口文件 C函數可能會看起來像這樣:
/* example.i */
%module example
%{
/* Put header files here or function declarations like below */
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
%}
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
建立一個Tcl模塊
在UNIX提示,鍵入以下(顯示為Linux,看到 SWIG維基共享庫 與其他操作系統頁面幫助):
unix % swig -tcl example.i
unix % gcc -fpic -c example.c example_wrap.c \
-I/usr/local/include
unix % gcc -shared example.o example_wrap.o -o example.so
unix % tclsh
% load ./example.so example
% puts $My_variable
3.0
% fact 5
120
% my_mod 7 3
1
% get_time
Sun Feb 11 23:01:07 1996
%
SWIG 命令生成一個文件 example_wrap.c 應該編譯和鏈接 其余的項目。 在這種情況下,我們已經建立了一個動態 可加載的擴展,可以加載到Tcl解釋器使用 “負載”命令。
swig更新日志
3.0.8 更新:
——增強pdf文檔。
——各種Python 3.5問題修復。
- std::數組支持添加Ruby和Python。
——要支持Ruby補充道。
——小改進CFFI去,Java、Perl、Python、Ruby。
3.0.7 更新:
添加對Octave-4.0.0的支持。
消除潛在的Android安全利用生成的Java類。
*小的新功能和錯誤修正。
3.0.6 更新:
——穩定和回歸修復。
——固定的c++角落案例解析。
——語言為c#的改進和錯誤修正,去,Java,Lua,Python,R。
- PC官方版
- 安卓官方手機版
- IOS官方手機版