利用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/c++ 封装成python可调用的so文动态链接库

注意:使用此种方法产生的so文件放在 python的site 目录下,可以直接import example,调用模块。 C 和 C++ 被公认为(理当如此)创建高性能代码的首选平台。对开发人员的一个...
  • u013378306
  • u013378306
  • 2017年04月14日 15:13
  • 1442

SWIG入门 - c++ 同 c# 的混合编程

同C#的混合编程-SWIG入门 最后更新日期:2014-04-18  by kagula 环境:Windows8.1 64bits(英文版)、Visual Studio 2013 Update1(英文...
  • lee353086
  • lee353086
  • 2014年11月02日 10:44
  • 4577

利用boost.python封装C++函数供python调用

今天需要在python里调用一个c++函数,因此各种查资料,发现boost.python库的使用还是很简单的。在这总结一下,以供大家参考。 给大家几个链接,在这里提醒大家,很多资料由于时间久远,可能b...
  • Sunshine_in_Moon
  • Sunshine_in_Moon
  • 2016年04月11日 19:33
  • 3667

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

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

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

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

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

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

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

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

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

一、文件:手写了三个文件: 1. add_function.h: float add_function(float, float); 2. add_function.c: float ...
  • mx_windforce
  • mx_windforce
  • 2017年04月05日 16:21
  • 769

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

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

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

Python是一门语法简单而且清晰的脚本语言,不过执行效率比较低。简单的说就是开发相对C/C++容易,但是执行效率不如C/C++,甚至有人称之为执行效率最低的鱼眼。如果可以将最重要的而且变化一般不大的...
  • jiang1st2010
  • jiang1st2010
  • 2012年12月12日 17:00
  • 6013
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用SWIG将C/C++库包装成Ruby模块
举报原因:
原因补充:

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