swig入门
来源:互联网 发布:windows.iso怎样安装 编辑:程序博客网 时间:2024/06/03 21:11
最近发现有些漏洞不能扫描,原来是没有需要的库,这些库原来是用SWIG生成的一些接口程序,于是顺便小研究了下这个SWIG是怎么回事。
下面是摘于SWIG中文网:http://swig.minidx.com/
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使用教程:
想要快一点的方法吗,使用swig吧。假设你有一些c你想再加入Tcl, Perl, Python, Java and C#.。举例来说有这么一个文件example.c
注:这个路径需视具体情况而定,我的目录在/usr/include/python2.5
我们现在可以使用如下Python模块 :
Microsoft Windows下运行SWIG SWIG能够运行在所有已知的32位版本的WINDOWS下95/98/NT/2000/XP。SWIG通常使用命令提示符因此能够使用NMAKE。模块 通常由DLL编译,可动态加载入Tcl, Python,或者任何你使用的语言。只需要小小加工,SWIG就能够在MS下发挥巨大作用。 That's it (well, more or less) 在开始前,你需要知道的事情。这里是简短的清单:
明确模块名称
使用 ANSI C/C++
理解如何编写一个共享模块/动态连接库(可能需要阅读一些所使用的编译器的帮助文件)
放松
Surely there's more to it... 上述例子都很简单,但是大体思路已经延伸到复杂的C/C++。事实上,重要的是明白SWIG一个完整的C++支持下几乎能包含所有语言的特征。这些包括预处理,指针,类,甚至C++模块。SWIG能够在特定语言打包结构和类变成PROXY。
为了说明这一点,假设你想要封装以下C++数据结构:
为了封装SWIG你需要如下接口:
接下去是编译(Python):
c++的程序试了下,没有成功。还需要继续研究。c的倒是已经成功了。感觉这个
工具还是很强大的。以前看过EMC的一个3D图形程序的源代码,里面是直接按照PYTHON
的C/C++扩展实现的,很是复杂。用这个工具真是简单得太多了。
下面是摘于SWIG中文网:http://swig.minidx.com/
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使用教程:
想要快一点的方法吗,使用swig吧。假设你有一些c你想再加入Tcl, Perl, Python, Java and C#.。举例来说有这么一个文件example.c
接口文件
现在,为了增加这些文件到你喜欢的语言中,你需要写一个接口文件(interface file)投入到swig中。这些C functions的接口文件可能如下所示:
建立Tcl模块
在UNIX系统提示,键入以下信息(LINUX系统请见SWIG WIKI共享库页面其他操作系统帮助):
该SWIG命令创建了一个文件example_wrap.c ,编辑并且和其余的程序联接。在这情况下,我们必须创建一个动态可装载的链接。能够装载进入TCL使用LOAD命令。
建立Python模块
转换编码C成Python模块很简单,只需要按如下做即可(请见其他操作系统的SWIG共享库帮助手册):
注:这个路径需视具体情况而定,我的目录在/usr/include/python2.5
我们现在可以使用如下Python模块 :
建立Perl模块
你可以建立如下的Perl模块,如Solaris(请见其他操作系统的SWIG共享库帮助手册):
建立Java模块
SWIG也会产生JNI代码以便Java代码进入C/C++。以下是建立一个Java模块的事例(cygwin ,见其他操作系统的swig维基共享库页帮助):
建立C#模块
SWIG也会产生代码以便C#使用Pinvoke进入C/C++。以下是如何建立C#模块事例。cygwin ,见其他操作系统的swig维基共享库页帮助。使用了开源DotGNU Portable.NET能够在大多数Unix系统上运行,和其他C# compilers一样方便使用:
SWIG 懒人方法
如上所见,并非总是需要写一个专门的接口文件。如果你有一个头文件,你可以直接在其中包含SWIG接口,如例:
Microsoft Windows下运行SWIG SWIG能够运行在所有已知的32位版本的WINDOWS下95/98/NT/2000/XP。SWIG通常使用命令提示符因此能够使用NMAKE。模块 通常由DLL编译,可动态加载入Tcl, Python,或者任何你使用的语言。只需要小小加工,SWIG就能够在MS下发挥巨大作用。 That's it (well, more or less) 在开始前,你需要知道的事情。这里是简短的清单:
明确模块名称
使用 ANSI C/C++
理解如何编写一个共享模块/动态连接库(可能需要阅读一些所使用的编译器的帮助文件)
放松
Surely there's more to it... 上述例子都很简单,但是大体思路已经延伸到复杂的C/C++。事实上,重要的是明白SWIG一个完整的C++支持下几乎能包含所有语言的特征。这些包括预处理,指针,类,甚至C++模块。SWIG能够在特定语言打包结构和类变成PROXY。
为了说明这一点,假设你想要封装以下C++数据结构:
为了封装SWIG你需要如下接口:
接下去是编译(Python):
c++的程序试了下,没有成功。还需要继续研究。c的倒是已经成功了。感觉这个
工具还是很强大的。以前看过EMC的一个3D图形程序的源代码,里面是直接按照PYTHON
的C/C++扩展实现的,很是复杂。用这个工具真是简单得太多了。
阅读全文
0 0
- swig入门
- swig入门
- 开发人员 SWIG 快速入门
- swig基本入门
- SWIG学习入门(一)
- SWIG
- SWIG
- SWIG
- SWIG
- SWIG
- SWIG
- swig
- Android突破七.SWIG快速入门
- nodejs前端模板引擎swig入门
- SWIG入门 - c++ 同 c# 的混合编程
- swig教程
- swig 简介
- swig-python
- HBase (2)---数据存储结构
- Intellij IDEA2017 scala环境搭建
- React 16 新特性
- VS Code编辑器快捷键使用
- codeforces 580A Kefa and First Steps
- swig入门
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- Application
- 数据结构实验之查找一:二叉排序树
- c中打开文件
- hibernate3 @Id 与 @Column位置的问题
- 入库时效列表
- 常见zz错误
- 装饰模式