2

听说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 repo 并创建了一个指向包含目录的符号链接,但我很确定我做错了。

我应该如何在我的代码中包含 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!"
4

1 回答 1

1

代替

#include <mruby.h>
#include <mruby/compile.h>

尝试

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

让我知道这是否有什么不同。编译器对包含 <> 和 "" 的包含使用不同的搜索路径。"" 是本地的。

你也可以试试

gcc -Ipath/to/ruby/include/dir example.c
于 2013-10-12T01:15:53.903 回答