如何编译一个mruby示例?

关于mruby的听力激励我开始学习C编程。 我已经在网上完成了一些教程,所以我理解了基础知识,但现在我想通过编译示例应用程序来开始玩mruby。 我理解如何编译单个C文件,但我一直试图弄清楚如何编译mruby和我自己的代码。

我在Mac OS X 10.8上使用GCC。

使用此示例:

#include  #include  #include  #include  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 repo并为include目录创建了一个符号链接,但我很确定我做错了。

我应该如何在我的代码中包含mruby,以便将它们全部编译在一起?

更新:这是我所拥有的目录结构,请注意mruby include目录的符号链接:

 $ 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!" 

代替

 #include  #include  

尝试

 #include "mruby.h" #include "mruby/compile.h" 

如果这有任何区别,请告诉我。 编译器使用包含<>和“”的不同搜索路径。 “”是当地的。

你也可以试试

 gcc -Ipath/to/ruby/include/dir example.c