【问题标题】:How to compile an mruby example?如何编译一个 mruby 示例?
【发布时间】:2013-10-20 04:24:12
【问题描述】:

听说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!"

【问题讨论】:

    标签: c ruby compilation mruby


    【解决方案1】:

    代替

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

    试试

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

    如果这有什么不同,请告诉我。编译器对包含 和 "" 的包含使用不同的搜索路径。 "" 是本地的。

    你也可以试试

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

    【讨论】:

    • 改为双引号并没有改变任何东西。我现在遇到的真正错误是Undefined symbols for architecture x86_64,我已经更新了我的问题以提供更多详细信息。
    • 我没有看到更新的问题。 “mruby.h:没有这样的文件或目录”是否消失并被“架构 x86_64 的未定义符号”错误所取代?
    • 抱歉,刚发完更新,再检查一下
    • 按照您给出的使用-I 标志的示例并传递带有头文件的目录会导致上述错误。
    • 好的,你正在取得进展。 gcc 找到了 ruby​​.h。你现在要做的是链接到 mruby 库。 mruby 有源代码吗?除了头文件,你还需要用mruby提供的库编译(这是一个二进制文件)或者编译mruby本身。
    猜你喜欢
    • 2012-05-02
    • 2015-06-07
    • 2017-07-02
    • 2012-12-25
    • 2015-03-24
    • 1970-01-01
    • 2020-11-14
    • 2012-03-12
    • 1970-01-01
    相关资源
    最近更新 更多