利用SWIG将C/C++库包装成Ruby模块

转载 2012年03月23日 14:49:12
利用SWIG将C/C++库包装成Ruby模块
2010-03-04 23:59

写了很多C/C++库,又想在Ruby中使用它们?不必用Ruby重写代码,SWIG(下载)可以帮你做到。 请参考以下示例。

(一)准备C++源文件 
/* 头文件: example.h */ 
extern double My_var; 
int factorial(int n); 

/* 源代码: example.cpp */ 
double My_var = 3.0;

int factorial(int n) 

    return n>1 ? factorial(n-1) : 1;
}

(二)编写SWIG的interface文件
/* File example.i */ 
/* 将来Ruby中采用的Module名称 */
%module example 
%{ 
#include "example.h" 
%}

/* 也可以在这里把变量、函数的声明直接列出来,但包含头文件显然更简洁、方便 */
%include "example.h"

(三)使用SWIG产生wrap文件。注:C++源代码需使用-c++参数
swig -c++ -ruby example.i # => example_wrap.cxx

(四)编译动态链接库。注:g++需使用-fPIC参数以生成Position Independent Code(PIC,位置无关代码),用于生成动态链接库(.so) ,在编译wrap文件时还应通过-I参数加上ruby.h所在位置(具体视安装位置不同而不同)。
g++ -c example.c # => example.o 
g++ -fPIC -c example_wrap.cxx -I/usr/local/lib/ruby/1.8.7/x86-64 # => example_wrap.o 
g++ -shared example.o example_wrap.o -o example.so

(五)使用
irb(main):001:0> require 'example'
=> true 
irb(main):002:0> Example.My_var
=> 3.0 
irb(main):003:0> Example.factorial(5)
=> 120

相关文章推荐

利用SWIG对C++库进行Python包装

最近因为项目要求,所以大致看了一下swig,在网上找到一篇不错的文章,转载之!也为自己以后备着! 本文转自http://techblog.99fang.com/?p=17 利用SW...

利用SWIG对C++库进行Python包装

导读途径SWIG的工作方式SWIG对Python支持到何种程度?版本说明SWIG文档说明SWIG包含的内容一个简单示例SWIG生成代码说明SWIG接口文件的结构常用功能说明模块函数及回调函数全局变量常...
  • xxxl
  • xxxl
  • 2012年12月12日 21:58
  • 6727

vs2013在图像处理中的应用(8):用SWIG自动包装C/C++接口

快乐虾http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651)欢迎转载,但请保留作者信息很久没有摸图像处理的东西了...

使用swig包装C或C++源代码在windows下用命令行编译并用distutils打包供python使用

一、文件:手写了三个文件: 1. add_function.h: float add_function(float, float); 2. add_function.c: float ...

高效开发Python扩展模块方法:用SWIG封装C/C++代码

原文首发地址: http://www.atolin.net/298/ 1. SWIG介绍: http://sourceforge.net/projects/swig/ 2. 对于性能...
  • linsoon
  • linsoon
  • 2013年02月19日 17:30
  • 740

使用SWIG将C/C++库移植到其他语言中

SWIG简介 SWIG是一个将C和C++语言程序绑定到其他语言的工具,可以让很多高层次的程序设计语言如脚本语言很方便地调用底层程序。SWIG支持很多的语言如Perl, PHP, Python, Tc...
  • ltbyshi
  • ltbyshi
  • 2013年01月20日 17:12
  • 372

利用 SWIG 转换 C/C++ 接口到 Java 接口

SWIG(Simplified Wrapper and Interface Generator)是一个将C/C++接口转换为其他语言接口的工具,从而可以讲C/C++的库集成到其他语言的系统中。目前SW...

利用swig实现python调用C/C++的方法

利用swig实现python调用C/C++的方法  Python是一门语法简单而且清晰的脚本语言,不过执行效率比较低。简单的说就是开发相对C/C++容易,但是执行效率不如C/C++,甚至有人称之...

Android突破八.使用SWIG将C/C++库移植到其他语言中

使用SWIG将C/C++库移植到其他语言中 一、使用SWIG将C转换成Java 1.SWIG简介 SWIG是一个将C和C++语言程序绑定到其他语言的工具,可以让很多高层次的程序设计语...

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

原文出处及讨论: http://www.blogjava.net/calvin/archive/2005/10/24/16606.html    作者:江南白衣    按照SWIG的思路,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用SWIG将C/C++库包装成Ruby模块
举报原因:
原因补充:

(最多只允许输入30个字)