Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

mrubyで書いたコードをC言語内で読み出す方法

mrubyで書いたコードをC言語内で読み出す方法です。
今回はまんま参考もと様と同じ内容ですが……

mrubyコードをC言語に埋め込む

今回導入するコードは以下の通り

C言語のコード

ソース1。mrb_funcallで実行開始です。
3番目が呼び出す関数名、4番目が引数の数です。

/* sample.c */
#include "mruby.h"
#include "mruby/proc.h"
#include "mruby/compile.h"
#include "stdio.h"

int main ()
{
    mrb_state* mrb;
    int n;
    FILE* f;
    mrb_value ret;

    mrb = mrb_open();
    f = fopen("test.rb", "r");
    mrb_load_file(mrb, f);
    fclose(f);

    ret = mrb_funcall(mrb, mrb_top_self(mrb), "test", 1, mrb_fixnum_value(20) );
    printf("ret=%d\n", mrb_fixnum(ret));

    return 0;
}

mrubyスクリプト

ソース2。引数を二倍して返すのみ。

##test.rb
def test a
  return a * 2
end

試す

mrubyへのリンクを貼る

$ ln -s ~/path/to/mruby/ mruby

ソースコードの用意

$ cat > sample.c <<EOS
  #{例の如くソース1を入力}
> EOS
$ cat > test.rb <<EOS
  #{例の如くソース2を入力}
> EOS
$ ls -FG
test.rb  mruby@     sample.c

コンパイル&実行

$ gcc -I mruby/include/ -I mruby/src/ sample.c mruby/build/host/lib/libmruby.a -lm
$ ./a.out 
ret=40

まとめ

最も基本的な例について扱いました。
mruby内部ではClassやHashも使えるので、もっと複雑なロジックを書く事が出来ます。