.rbファイルをmrbcでコンパイル
mrbcコマンドで、rubyのスクリプトファイルをコンパイルして、
これをC言語のuint8_t型の配列として宣言したソースコードを出力
することが出来る。
mrbc -BcheckFile checkFile.rb
checkFile.cというファイルが出来る。
-oでこのファイル名を指定することも出来るらしい。
生成されたCのソースコード
/* dumped in little endian order.
use `mrbc -E` option for big endian CPU. */
#include <stdint.h>
const uint8_t
#if defined __GNUC__
__attribute__((aligned(4)))
#elif defined _MSC_VER
__declspec(align(4))
#endif
checkFile[] = {
0x45,0x54,0x49,//以下省略
};
C言語側で.rbファイルのスクリプトを呼び出すには
extern const uint8_t checkFile[];
mrb_load_irep(mrb, checkFile);
// 以降は、.rbファイルの内容に応じて頑張る。
mrb_value val;
val = mrb_funcall(mrb, mrb_top_self(mrb), "checkFile", 1,
mrb_str_new_cstr(mrb, filepath));
なんでこんなことをするか
rubyのスクリプトのままだと、実行ファイルや共有ライブラリとして配布した際に、
スクリプトファイルも必要になってしまうが、mrbcで埋め込めば、これを回避できる。