7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

mrubyでC言語のソースにrubyスクリプトを埋め込むには

Posted at

.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で埋め込めば、これを回避できる。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?