Ruby中使用SWIG编写ruby扩展模块实例
在使用ruby/rails的过程中,确实发现有时性能不尽人意,如生成一个拥有600项的item的3层树形结构目录要花去20ms,为提高性能在学习用c/c++写ruby模块的过程中,认识了swig,rubyInline等一系列帮助编写c/c++来提升ruby性能的辅助工具。
rubyInline用于内嵌c/c++程序,简单快捷,swig则帮助我们更容易地用c/c++写出独立的ruby模块。
swig的入门使用方法
目标:用swig/c++编写一个ruby模块Test,并提供add方法作加法运算。
相关文件:
(1).test.i接口
(2).test.h头文件
(3).test.cxx函数实现
(4).extconf.rb用于生成makefile
(5).(自动)test_wrap.cxxswig生成的test封装
(6).(自动)MakefileMakefile文件由rubyextconf.rb得到
(7).(自动)test.soruby模块由make得到
1、建立接口文件test.i
%moduletest %{ //包含头文件 #include"test.h" %} //接口add intadd(int,int);
2、编写wrap文件
swig-c++-rubytest.i
得到test封装文件test_wrap.cxx
3、编写test.h与test.cxx
//test.h #ifndef_TEST_TEST_H #define_TEST_TEST_H externintadd(int,int); #endif //test.cxx #include"test.h" intadd(intleft,intright) { returnleft+right; }
4、编写extconf.rb用于快速生成makefile
require'mkmf'
dir_config'test' #stdc++库,add函数未用到 $libs=append_library$libs,'stdc++' create_makefile'test'