王朝百科
分享
 
 
 

SWIG

王朝百科·作者佚名  2010-08-23  
宽屏版  字体: |||超大  

一、定义SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP。支持语言列表中也包括非脚本编译语言,例如C#, Common Lisp (CLISP, Allegro CL, CFFI, UFFI), Java, Modula-3, OCAML以及R,甚至是编译器或者汇编的计划应用(Guile, MzScheme, Chicken)。SWIG普遍应用于创建高级语言解析或汇编程序环境,用户接口,作为一种用来测试C/C++或进行原型设计的工具。SWIG还能够导出XML或Lisp s-expressions格式的解析树。SWIG可以被自由使用,发布,修改用于商业或非商业中。

二、特点SWIG是一种简化脚本语言与C/C++接口的开发工具。简而言之,SWIG是一个通过包装和编译 C 语言程序来达到与脚本语言通讯目的的工具。2.1、C/C++语言编程的优缺点:-SWIG接口文件

-swig命令

-创建Perl5模块

-创建Python模块

-快捷方式2.2、支持的C/C++特性因为C/C++的标准正在进步,因此SWIG也是一个不断发展的过程,在1.3版本中支持的特性包括:

-完全支持C99预处理

-所有的ANSI C和C++数据类型

-支持函数、常量、变量

-支持类

-单重或者多重继承

-函数、方法的重载

-运算符重载

-C++模版

-命名空间

-变长传入参数

-C++ 的 smart指针2.3、“非侵入式”创建接口对原有的C/C++源代码只需要很小的改动,或者根本不用改动。2.4、将SWIG合并入安装系统当我们对原有的source code进行make或者build时,如何巧妙的将SWIG嵌入其中。这是我们要重点考虑的问题。2.5、自动产生代码SWIG通过的input文件的parse,自动生成output文件(wrapped),完全不需要手工 干预(事实上,因为产生的output文件十分复杂,大部分人也不会原意手动去修改源文件)2.6、SWIG与自由我们无意在这里讨论纷乱复杂的政治问题,只是要指出SWIG是根据一种特定的编程“哲学”开发出来的。这种哲学的精髓在于假设程序员本人都是很聪明的,而工具只需要安守本分 就好。

SWIG试图理解最为复杂的C++语法并将其翻译为一系列简单的接口,而且所有的输出都符合ANSI C标准,因而可以依赖任意一款编译器进行编译,这也保证了程序人员免于在调试非标准C/C++语言方面付出的多余劳动。2.7、运行SWIG敲入swig命令,不带任何参数,就可以看到swig的所有参数输出和详细说明。

输入文件的格式,带.swg或.i后缀名的文件,最常见的格式如下所示:

%module my_module

%{

#i nclude

%}

extern double result;

void output_throught();

MyClass *my_class;

输出文件:

如果没有任何特别参数说明,输出文件包括一个包装source(my_module_wrap.cxx ,一个头文件。

三、对C的声明进行简单包装举例说明,用SWIG将C source包装为一个python模块,并输出。

处理基本类型问题,int/short/long/unsigned/signed/

全局变量,SWIG可以将全局变量映射为脚本语言的变量。

常量……

。指针与复杂对象 简单的指针,最基本的C数据类型指针。

空指针NULL,被解释为字符串“NULL”或者是0值。

。其他实际问题

带值返回

。structure和union

SWIG在处理Structure和Union时,存在的技巧和问题。

。代码插入

。建立接口的策略 .......

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
中国古代四大美女:背后隐藏惊人秘密
 女性   2025-06-20
如何用java替换看不见的字符比如零宽空格​十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
 
>>返回首页<<
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有