打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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 -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
 

      System.loadLibrary("example");
      
int g = new Example().add(42,105);


  3.总结
    当你山穷水尽,准备要重新发明轮子的时候,总该想起有个swig,可以把C/C++的轮子,换装到你的语言上。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
python调用c/c++库
SWIG Tutorial
使用SWIG实现C/C 与其他语言间的互相调用 zz
图解九种编程语言,各位看官觉得那种语言是NO1
一张图告诉你该选哪种编程语言
对于初学者什么是最好的编程语言?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服