'ruby extensions'에 해당되는 글 1건

  1. 2008.08.30 Ruby extension 만들기 #1
반응형

Ruby에서는 Tuxedo를 호출할수 있는 방법이 없다. 따라서 tuxedo 호출을 위한 인터페이스를 만들어야 하는데 Ruby에서 Extension은 C로 만들어 질수 있다. extension이름을 rubytuxedo로 정하고 extension을 만들어 보자.

1. extension 을 작업할 directory를 만든다.
  - mkdir rubytuxedo

2. mkmf.rb 를 다음과 같이 만든다.
-->
# mkmf 모듈은 Ruby extension을 만들기 위한 makefile을 만들기 위해서 필요하다.
require 'mkmf'
# make 파일을 만든다 (현재 디렉토리로)
create_makefile('rubytuxedo')
<--
ruby mkmf.rb 로 실행하게 되면 Makefile이 생성 된다.

3. rubytuxedo.c 를 다음과 같이 만든다
-->
#include "ruby.h"
static VALUE rb_mRubyTuxedo;
static VALUE rb_cRubyTuxedo;
VALUE method_tuxreadenv(VALUE self){
        int x=10;
        return INT2NUM(x);
}
void Init_rubytuxedo(){
        rb_mRubyTuxedo=rb_define_module("RubyTuxedo");
        rb_cRubyTuxedo= rb_define_class_under(rb_mRubyTuxedo,"RubyTuxedo",rb_cObject);
        rb_define_method(rb_cRubyTuxedo,"tuxreadenv",method_tuxreadenv,0);
}
<--
위 프로그램은 RubyTuxedo라는 모듈 아래에 RubyTuxedo라는 클래스를 정의하고, 이 클래스 밑에 tuxreadenv라는 메소드를 정의한 것이다.
make 및 make install을 하게 되면 rubytuxedo.so가 설치가 된다.
실행을 해보자..

irb를 입력하고
irb(main):001:0> require 'rubytuxedo'
=> true
irb(main):003:0> tuxobj=RubyTuxedo::RubyTuxedo.new
=> #<RubyTuxedo::RubyTuxedo:0x300c7d58>
irb(main):004:0> tuxobj.tuxreadenv
=> 10
irb(main):005:0>

모듈이 로드가 되고 새로은 obj를 생성하여 함수를 호출을 해 보았다.

반응형
Posted by alias
,