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官方手机版