SWIG,把C/C API 导出成Java,C#,Python,Ruby,Php的类库...
来源:百度文库 编辑:神马文学网 时间:2024/04/27 14:11:32
SWIG,把C/C++ API 导出成Java,C#,Python,Ruby,Php的类库
文艺一点总结,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代码需如是:
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
SWIG 就为你自动生成了这个冗长的wrapper文件,其中还妥善完成了类型转换,函数指针、模板这些C++功能在其他语言中的转换等诸般工作,善举阿。
2.操作过程:
很简单,特别在VC里dsp文件都写好了,把选项设为Release,rebuild一下就搞定。
如果要拆成慢动作,在一个Java项目里是这样的:
1.编写interface文件example.i
如果api有头文件就更简单了,下面的代码定义一个example类
%module example
%{
#include "example.h"
%}
%include "example.h"
2. swig -javaexample.i
生成符合JNI语法(见上)的C文件: example_wrap.c
生成Java类文件:exampleJNI.java,example.java
3.VC把example_wrap.c 和example.c 打包成dll.
4.在普通java程序里使用example.java
System.loadLibrary("example");
int g = new Example().add(42,105);
3.总结
当你山穷水尽,准备要重新发明轮子的时候,总该想起有个swig,可以把C/C++的轮子,换装到你的语言上。
文艺一点总结,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代码需如是:
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
SWIG 就为你自动生成了这个冗长的wrapper文件,其中还妥善完成了类型转换,函数指针、模板这些C++功能在其他语言中的转换等诸般工作,善举阿。
2.操作过程:
很简单,特别在VC里dsp文件都写好了,把选项设为Release,rebuild一下就搞定。
如果要拆成慢动作,在一个Java项目里是这样的:
1.编写interface文件example.i
如果api有头文件就更简单了,下面的代码定义一个example类
%module example
%{
#include "example.h"
%}
%include "example.h"
2. swig -javaexample.i
生成符合JNI语法(见上)的C文件: example_wrap.c
生成Java类文件:exampleJNI.java,example.java
3.VC把example_wrap.c 和example.c 打包成dll.
4.在普通java程序里使用example.java
System.loadLibrary("example");
int g = new Example().add(42,105);
3.总结
当你山穷水尽,准备要重新发明轮子的时候,总该想起有个swig,可以把C/C++的轮子,换装到你的语言上。
SWIG,把C/C API 导出成Java,C#,Python,Ruby,Php的类库...
C Java PHP Perl Python的程序代码美化工具使用
C Java PHP Perl Python的程序代码美化工具使用 (笔记 by 车东)
[ZT]C Java PHP Perl Python 的程序代码美化工具 - ggg Freak - CSDNBlog
开源空间 网络安全工具开发函数库Libnet -- Linux,C,C ,Java,Ajax,XML,perl,php,python,ruby,MySQL,Gnome,KDE,Qt,Gtk,bash,shell,嵌入式,网络,信息安全,操作系统,数据结构,编译原理
分布式 Key-Value 存储系统:Cassandra 入门 -- Linux,C,C ,Java,Ajax,XML,perl,php,python,ruby,MySQL,Gnome,KDE,Qt,Gtk,bash,shell,嵌入式,网络,信息安全,操作系统,数据结构,编译原理
php 扩展模块c库
libcurl - C API
三大编程语言的性能PK--Java, C/C++和Ruby
用C/C 扩展Python语言
C 扩展和嵌入 Python
debian linux下java运行环境的建立(页 1) - Linux - PHP C...
非同凡响,C 调用PHP - C|C - 编程开发 - 伊甸网
[ 探讨:]python的效率实在是比不上c!
Modern C Design, Spring Framework和Ruby的Mixi...
C 和java中多态机制的异同
经典的C 库
Python介绍 - 风雨兼程 - C 博客
敏捷软件开发11个原则 - (Java/C/Php/C /.NET) (OS,DB,Web,Net,Graph,Game) - CSDN博客
记事本——Windows,Unix,Linux,FreeBSD,ASP,PHP,C++,Java,学习,生活全记录
java与c/c 进行socket通信的一些问题(1)
ZY's WordPress ? C程序员学习C++/Java
c与java中取精确到毫秒的时间
UNICODE的一点理解 - JAVA AJAX C - BlogJava