SWIG是一個(gè)軟件開(kāi)發(fā)工具,連接用C和c++編寫(xiě)的程序和各種高級(jí)程序設(shè)計(jì)語(yǔ)言。SWIG是使用不同類型的目標(biāo)語(yǔ)言包括常見(jiàn)腳本語(yǔ)言如Javascript、Perl、PHP、Python、Tcl和Ruby。支持的語(yǔ)言列表還包括non-scripting c#等語(yǔ)言,Common Lisp(CLISP,快板CL,CFFI UFFI),D,語(yǔ)言,Java,Lua,Modula-3,OCAML和八度,R和Scilab。還幾個(gè)解釋和編譯計(jì)劃實(shí)現(xiàn)(詭計(jì),MzScheme /球拍、雞肉)支持。
SWIG最常用于創(chuàng)建高層解釋或編譯的編程環(huán)境,用戶界面,并作為測(cè)試和原型工具C / c++軟件。SWIG通常用于解析C / c++接口并生成所需的粘合代碼的上述目標(biāo)語(yǔ)言調(diào)用C / c++代碼。SWIG還可以導(dǎo)出的解析樹(shù)的XML和Lisp s-expressions形式。
swig功能特性
代碼生成
SWIG目前支持20三個(gè)不同的目標(biāo)語(yǔ)言生成包裝器代碼:
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
此外,可以導(dǎo)出為XML解析樹(shù)和Lisp s-expressions。 實(shí)驗(yàn)工作也可用于派克模塊。
ISO C
SWIG包裝所有ISO C99的能力。 功能包括:
的處理 所有 ISO C數(shù)據(jù)類型。
全局函數(shù)、全局變量和常量。
結(jié)構(gòu)和工會(huì)。
指針。
數(shù)組和多維數(shù)組。
指向函數(shù)的指針。
可變長(zhǎng)度參數(shù)。
類型定義。
枚舉。
ISO C + +
SWIG提供包裝支持ISO C + + 11。
所有c++數(shù)據(jù)類型。
引用。
指向成員的指針。
類。
繼承和多重繼承。
重載的函數(shù)和方法(使用動(dòng)態(tài)調(diào)度)。
重載操作符。
靜態(tài)成員。
名稱空間(包括使用聲明、別名、嵌套等)。
模板
嵌套類
成員模板
模板特殊化和局部特殊化。
智能指針
c++庫(kù)支持字符串和STL。
大多數(shù)新的c++ 11標(biāo)準(zhǔn)特性。
c++用戶依賴于先進(jìn)的模板編程技術(shù) (如。 模板元編程),也應(yīng)該意識(shí)到SWIG 目前需要手動(dòng)所有模板類的實(shí)例化。 因此,如果您的應(yīng)用程序包含50000年的實(shí)例化 模板類,你的情況可能不同。
預(yù)處理
SWIG為一個(gè)完整的C預(yù)處理器提供了以下功能:
宏擴(kuò)展。
自動(dòng)包裝#語(yǔ)句定義為常量(適用時(shí))。
支持C99(可變宏擴(kuò)展)。
自定義特性
SWIG提供控制的大多數(shù)方面包裝器生成。 大多數(shù) 這些定制選項(xiàng)完全集成到c++類型 系統(tǒng),便于應(yīng)用定制在繼承 層次結(jié)構(gòu),模板實(shí)例化等等。 功能包括:
自定義類型轉(zhuǎn)換/編組。
異常處理。
類/結(jié)構(gòu)擴(kuò)展。
內(nèi)存管理。
消除歧義。
模板實(shí)例化。
文件導(dǎo)入和跨模塊連接。
代碼包含helper函數(shù)支持。
廣泛的診斷(錯(cuò)誤/警告消息包括細(xì)粒警告鎮(zhèn)壓)。
擴(kuò)展SWIG宏觀處理。
swig 怎么用
swig python 安裝使用教程
假設(shè)你有你想要的C函數(shù)添加到Tcl、Perl、Python、Java和c#。 具體來(lái)說(shuō),假設(shè)你有一個(gè)文件“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);
}
接口文件
現(xiàn)在,為了將這些文件添加到您最喜愛(ài)的語(yǔ)言,你需要寫(xiě)一個(gè) “接口文件”,這是SWIG的輸入。 一個(gè)接口文件 C函數(shù)可能會(huì)看起來(lái)像這樣:
/* 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();
建立一個(gè)Tcl模塊
在UNIX提示,鍵入以下(顯示為L(zhǎng)inux,看到 SWIG維基共享庫(kù) 與其他操作系統(tǒng)頁(yè)面幫助):
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 命令生成一個(gè)文件 example_wrap.c 應(yīng)該編譯和鏈接 其余的項(xiàng)目。 在這種情況下,我們已經(jīng)建立了一個(gè)動(dòng)態(tài) 可加載的擴(kuò)展,可以加載到Tcl解釋器使用 “負(fù)載”命令。
swig更新日志
3.0.8 更新:
——增強(qiáng)pdf文檔。
——各種Python 3.5問(wèn)題修復(fù)。
- std::數(shù)組支持添加Ruby和Python。
——要支持Ruby補(bǔ)充道。
——小改進(jìn)CFFI去,Java、Perl、Python、Ruby。
3.0.7 更新:
添加對(duì)Octave-4.0.0的支持。
消除潛在的Android安全利用生成的Java類。
*小的新功能和錯(cuò)誤修正。
3.0.6 更新:
——穩(wěn)定和回歸修復(fù)。
——固定的c++角落案例解析。
——語(yǔ)言為c#的改進(jìn)和錯(cuò)誤修正,去,Java,Lua,Python,R。
- PC官方版
- 安卓官方手機(jī)版
- IOS官方手機(jī)版