浏览 2229 次
锁定老帖子 主题:使用Swig扩展ruby性能
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-16
最后修改:2009-01-24
rubyInline用于内嵌c/c++程序,简单快捷。 swig则帮助我们更容易地用c/c++写出独立的ruby模块。 swig的入门使用方法 目标:用swig/c++编写一个ruby模块Test,并提供add方法作加法运算。 相关文件: test.i 接口 test.h 头文件 test.cxx 函数实现 extconf.rb 用于生成makefile (自动)test_wrap.cxx swig生成的test封装 (自动)Makefile Makefile文件由ruby extconf.rb得到 (自动)test.so ruby模块 由make得到 1、建立接口文件test.i %module test %{ //包含头文件 #include "test.h" %} //接口add int add(int,int); 2、生成wrap文件 swig -c++ -ruby test.i 得到test封装文件 test_wrap.cxx //test.h #ifndef _TEST_TEST_H #define _TEST_TEST_H extern int add(int,int); #endif //test.cxx #include "test.h" int add(int left,int right) { return left+right; } 4、编写extconf.rb用于快速生成makefile require 'mkmf' dir_config 'test' #stdc++库,add函数未用到 $libs = append_library $libs,'stdc++' create_makefile 'test' 运行 ruby extconf.rb 得到 Makefile 文件 5、生成test模块 运行 make 得到模块 test.so 6、测试 irb irb(main):001:0> require 'test' => true irb(main):002:0> Test.add 3,4 => 7 irb(main):003:0> Test.add 3333333333333333333333,44444444444444444 TypeError: Expected argument 0 of type int, but got Bignum 3333333333333333333333 in SWIG method 'add' from (irb):3:in `add' from (irb):3 from :0 irb(main):004:0> 测试成功 7、swig swig支持很多c++的高级特性来编写ruby的模块,如类,继承,重载,模板,stl等。 8、相关链接 swig swig/ruby 文档 作者的blog ------------------------------------------- 注:本文为antter即本文博主原创,非转载。欢迎大家交流。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |