SWIG,把C/C++ API 导出成Java,C#,Python,Ruby,Php的类库
来源:互联网 发布:js舞蹈视频教程 编辑:程序博客网 时间:2024/05/17 02:09
文艺一点总结,SWIG就是C/C++类库与泛高阶语言的万能粘合剂。
按照Swig的思路,C/C++是很优秀的library级代码语言,而写界面等方面则是Java、C#、Python们占优。所以SWIG(Simplified Wrapper and Interface Generator) 就把C/C++写的类库,编译为上述高阶语言的Class来使用。
原本担心这个项目有点边缘化,一看原来Ruby和Python早就靠它从C/C++里溜东西出来了。对于python, ruby这些家底不厚的新生代来说,C/C++的类库很有魅惑力。
cyt偶像说,"做产品的时候好呀:有丰富的API接口,支持java、python、php、perl、ruby…… 多好吹…… "
1. 实现原理:
比如Java吧,有一个JNI机制可以直接调用C代码,但要求C代码需如是:
{
printf("Hello world!/n");
return;
}
SWIG 就为你自动生成了这个冗长的wrapper文件,其中还妥善完成了类型转换,函数指针、模板这些C++功能在其他语言中的转换等诸般工作,善举阿。
2.操作过程:
很简单,特别在VC里dsp文件都写好了,把选项设为Release,rebuild一下就搞定。
如果要拆成慢动作,在一个Java项目里是这样的:
1.编写interface文件example.i
如果api有头文件就更简单了,下面的代码定义一个example类
%{
#include "example.h"
%}
%include "example.h"
2. swig -java example.i
生成符合JNI语法(见上)的C文件: example_wrap.c
生成Java类文件:exampleJNI.java,example.java
3.VC把example_wrap.c 和example.c 打包成dll.
4.在普通java程序里使用example.java
int g = new Example().add(42,105);
3.总结
当你山穷水尽,准备要重新发明轮子的时候,总该想起有个swig,可以把C/C++的轮子,换装到你的语言上。
- SWIG,把C/C++ API 导出成Java,C#,Python,Ruby,Php的类库
- swig 把c/c++ 封装成python可调用的so文动态链接库
- Java、C++、Python、Ruby、PHP、C#、JS
- 利用SWIG将C/C++库包装成Ruby模块
- swig c python
- Python与C++,SWIG
- SWIG,C/C++类库与Java,Python等泛高阶语言的万能粘合剂
- SWIG,C/C++类库与Java,Python等泛高阶语言的万能粘合剂
- SWIG,C/C++类库与Java,Python等泛高阶语言的万能粘合剂
- SWIG,C/C++类库与Java,Python等泛高阶语言的万能粘合剂
- SWIG,C/C++类库与Java,Python等泛高阶语言的万能粘合剂
- Java、C++、Python、Ruby、PHP、C#和JavaScript的理解
- VS中利用swig实现c/c++导出python接口
- 精通CSS、PHP、C、C++、C#、Java、Ruby、python、Objective-C、Pascal、spss、sas
- 编程语言拟人化(1):Java、C++、Python、Ruby、PHP、C#、JS的区别
- 在VS中利用swig导出c/c++ 的python接口文件
- Python调用C/C++(使用SWIG)
- SWIG之为C/C++的API生成Python调用接口基础
- 《C++ primer》学习笔记之二十五:template function 的实例化
- VRSW.vbp
- VRSW.INI
- 《C++ primer》学习笔记之二十六:None-type template parameter
- 《C++ primer》学习笔记之二十七:当模板参数是另一个模板类的实例时写法要注意
- SWIG,把C/C++ API 导出成Java,C#,Python,Ruby,Php的类库
- mHook.bas
- cSystemHook.cls
- 《C++ primer》学习笔记之二十八:类点滴,记录琐碎的类的语法或注意事项
- HookDLL.vbp
- MySql创建用户及授权
- 《C++ primer》学习笔记之二十九: 当copy constructor遇到operator=
- 《C++ primer》学习笔记之三十:explicit constructor
- 《C++ primer》学习笔记之三十一:stack