`
江南白衣
  • 浏览: 550042 次
  • 来自: 广州
社区版块
存档分类
最新评论

SWIG,C/C++类库与Java,Python等泛高阶语言的万能粘合剂

阅读更多

  原文出处及讨论: http://www.blogjava.net/calvin/archive/2005/10/24/16606.html

   作者:江南白衣

   按照SWIG的思路,C/C++是很优秀的library级代码语言,而写界面等方面则是Java、C#、Python们占优。所以,swig让你可以在高阶语言里调用C/C++写的类库,并且不是简单的跨语言调用,而是把类库编译为宿主语言里Class这样的一等公民。
    原本担心这个项目有点边缘化,一看原来Ruby和Python早就靠它从C/C++里溜东西出来了。对于python, ruby这些家底不厚的新生代来说,C/C++的类库很有魅惑力。即使是富得不行的Java,也靠swig为SDL搞了个java版
   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(Simplified Wrapper and Interface Generator) 为你自动生成了这个冗长的wrapper文件和相应的Java类,其中还妥善完成了类型转换,函数指针、模板这些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 i = new Example().add(42,105);


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



分享到:
评论

相关推荐

    swig工具,C/C++到python, tcl 的接口

    SWIG(Simplified Wrapper and Interface Generator)是一种开源的接口生成工具,可以将C/C++语言与各种脚本语言集成,包括Python、Tcl、Perl、 Ruby等。SWIG的主要功能是生成一个 wrapper(封装器),将C/C++代码...

    SWIG 源码(C/C++与其他语言的粘合剂)

    SWIG普遍应用于创建高级语言解析或汇编程序环境,用户接口,作为一种用来测试C/C++或进行原型设计的工具。SWIG还能够导出XML或Lisp s-expressions格式的解析树。SWIG可以被自由使用,发布,修改用于商业或非商业中。

    swig--在java、C#中调用c++写的DLL(以vs2012配置为例)

    标题中的“swig”是指Software Interface Generator,它是一个开源工具,用于将C和C++代码与多种编程语言(如Java和C#)互操作。在本案例中,我们将探讨如何利用SWIG在Java和C#中调用由C++编写的动态链接库(DLL)。VS...

    Python C++ and SWIG

    这些接口文件可以被编译成 Python 可以直接调用的模块,从而实现 Python 代码与 C/C++ 代码之间的无缝交互。 - **优势**: - 可以根据需要将部分模块移植到 C/C++,优化性能瓶颈,而不会影响整体架构。 - Python ...

    SWIG 公开 C/C++ 代码,包括 Ruby、Perl、Tcl、C# 和 Python

    C 和 C++ 被公认为...SWIG 允许您向广泛的脚本语言公开 C/C++ 代码,包括 Ruby、Perl、Tcl 和 Python。本文使用 Ruby 作为公开 C/C++ 功能的首选脚本接口。要理解本文,您必须具备 C/C++ 与 Ruby 方面的相应知识。

    Java调用C++类库--JNI

    JNI是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互,尤其是本地已有的C/C++代码。这篇博客文章“Java调用C++类库--JNI”可能详细介绍了如何在Java程序中利用JNI调用C++编写的函数。 在Java程序...

    using swig to bind c++ to python

    SWIG(Simplified Wrapper and Interface Generator)是一款开源工具,用于创建C/C++代码与多种解释型语言(如Python、Perl、Tcl等)之间的接口。它最初是为了解决大型并行模拟代码中的物理包与解释型语言交互的问题...

    swig 打包C++ python应用

    swig 打包C/C++程序;供python调用。 本软件操作平台windows 10 Vs2017;python3.8; 主要讲述swig vs配置,测试用例。 主要包含常量,变量,指针,结构体定义及运用。

    使用swig将C代码转为JAVA接口的例子(Win10平台)

    配置环境变量JAVA_BIN和JAVA_INCLUDE。比如: ...工程“属性” -> C/C++ -> 常规 -> 调试信息格式,选择“程序数据库(/Zi)”。 “生成”64位版本。 打开win10控制台,进入simple,运行”java runme“。

    基于C++开发的WEB服务器,支持C/C++、Python、Java等多语言混合开发WEB应用

    2. **多语言集成**:通过特定的接口或者插件机制,服务器支持C、Python和Java代码的嵌入,这可能涉及到语言间的互操作性(如C++的绑定技术,如SWIG或Boost.Python)、进程间通信(IPC)或者异步调用。 3. **Web应用...

    cmake_c++_python_swig

    这个主题是跨语言编程的一个重要方面,特别是在科学计算、数据分析和软件开发领域,C++的高性能与Python的易用性结合得尤为紧密。 **CMake简介** CMake是一种开源的、跨平台的自动化构建系统,用于管理项目的构建...

    python加载自己写的c/c++程序

    Python是一种高级编程语言,以其简洁的语法和强大的库支持而受到广泛的欢迎,但它在执行效率上相较于C/C++等低级语言稍显不足。为了利用C/C++的高性能优势,尤其是对于计算密集型任务,我们可以将算法编写为C/C++...

    SWIG 2.0.11 C/C++接入各种不同语言的接口程序

    SWIG is a compiler that takes C/C++ declarations and creates the wrappers needed to access those declarations from other languages including including Perl, Python, Tcl, Ruby, Guile, and Java....

    使用Swig转换C++库到C#示例代码

    Swig(Simplified Wrapper and Interface Generator)是一种工具,它能够自动将C++库转换为其他编程语言,如C#,从而让这些语言可以调用C++的函数和类。在这个"使用Swig转换C++库到C#示例代码"的压缩包中,我们有三...

    python调用C/C++ demo

    本篇将详细介绍这两个示例`pyton_C`和`python_C++`所展示的Python调用C/C++的方法。 1. Python调用C:通过`ctypes`库 `ctypes`是Python的标准库之一,它允许我们直接调用C语言编写的动态链接库(.dll或.so文件)。...

    swig实例java调用c

    在Java与C/C++的交互中,Swig通常会生成一个JNI(Java Native Interface)头文件和一个C/C++源文件,这两个文件包含了调用原生代码所需的接口。 1. **Swig的使用流程**: - 首先,你需要有一个C/C++库,其中包含你...

    linux 下 python调用c或者c++编写的代码使用案例

    在Linux环境下,Python作为一种强大的脚本语言,常常需要与C或C++等底层语言交互以提升性能或利用现有的C/C++库。本案例提供了解决这一需求的四种不同方法,适用于那些希望在Python中调用C或C++代码的开发者。下面...

    基于Python和C_C++的分布式计算架构.pdf

    本文探讨了一种结合Python和C/C++的分布式计算架构,该架构主要利用了SWIG技术和RPYC,旨在解决数据高效传递、混合Python和C/C++代码以及数据同步问题,从而达到高效率和易用性的目标。 首先,文章介绍了Python语言...

    swig的学习以及国密的python封装.zip_python 国密_swig的学习以及国密的python封装_国密

    1. **SWIG介绍**:SWIG是一个开源工具,用于自动构建绑定,让C/C++代码能够与多种脚本语言(如Python、Perl、Ruby等)进行交互。它处理C/C++头文件,生成所需的接口代码,使得脚本语言可以直接调用C/C++函数。 2. *...

Global site tag (gtag.js) - Google Analytics