淘小兔

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

聽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。

点击下载

下载仅供下载体验和测试学习,不得商用和正当使用。

下载体验

请输入密码查看内容!

如何获取密码?

 

点击下载