mrubyについて聞いたことがきっかけで、C プログラミングを学び始めました。オンラインでいくつかのチュートリアルに取り組んだので、基本は理解できましたが、サンプル アプリケーションをコンパイルして mruby を試してみたいと思います。単一の C ファイルをコンパイルする方法は理解していますが、自分のコードと一緒に mruby もコンパイルする方法を理解しようとしています。
Mac OS X 10.8 で GCC を使用しています。
この例を使用すると:
#include <stdlib.h>
#include <stdio.h>
#include <mruby.h>
#include <mruby/compile.h>
int main(void)
{
mrb_state *mrb = mrb_open();
char code[] = "p 'hello world!'";
printf("Executing Ruby code from C!\n");
mrb_load_string(mrb, code);
return 0;
}
そして、次のコマンドを実行します。
gcc example.c
私は明らかにエラーが発生します:
engine.c:4:19: error: mruby.h: No such file or directory
git リポジトリのクローンを作成し、インクルード ディレクトリへのシンボリック リンクを作成しましたが、間違っていると確信しています。
すべてが一緒にコンパイルされるように、コードに mruby を含めるにはどうすればよいですか?
更新:これが私が持っているディレクトリ構造です。mruby インクルード ディレクトリへのシンボリック リンクに注意してください。
$ tree -l .
.
├── example.c
└── include
└── mruby -> ../../mruby/include
├── mrbconf.h
├── mruby
│ ├── array.h
│ ├── class.h
│ ├── compile.h
│ ├── data.h
│ ├── debug.h
│ ├── dump.h
│ ├── gc.h
│ ├── hash.h
│ ├── irep.h
│ ├── khash.h
│ ├── numeric.h
│ ├── proc.h
│ ├── range.h
│ ├── string.h
│ ├── value.h
│ └── variable.h
└── mruby.h
ディレクトリを含めてコンパイルすると:
gcc example.c -I include/mruby
次のエラーが表示されます。
Undefined symbols for architecture x86_64:
"_mrb_load_string", referenced from:
_main in ccd8XYkm.o
"_mrb_open", referenced from:
_main in ccd8XYkm.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
更新:ファイルの指示に従いましたmruby/INSTALL
(基本的には、mruby プロジェクトのルート ディレクトリで make を実行するように指示されています)。mruby/build/host
これにより、ファイルを含む一連のディレクトリとフィールドがディレクトリに追加されましたlib/libmruby.a
。コンパイル時にこのファイルを含めることで、サンプル スクリプトをコンパイルできました。
gcc -Iinclude/mruby example.c ../mruby/build/host/lib/libmruby.a
今、私は自分のアプリを実行します:
$ ./a.out
Executing Ruby code from C!
"hello world!"