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

利用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值