Как скомпилировать пример mruby?

Услышав о mruby, я начал изучать программирование на Си. Я работал над несколькими учебными пособиями онлайн, чтобы понять основы, но теперь я хотел бы начать играть с mruby, составив пример приложения. Я понимаю, как скомпилировать один файл C, но я застрял в попытке выяснить, как компилировать mruby вместе с моим собственным кодом.

Я использую GCC на Mac OS X 10.8.

Используя этот пример:

#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 и создал символическую ссылку на каталог 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 файл (который в основном только что сказал запустить make в корневом каталоге проекта mruby). Это добавило кучу каталогов и полей в 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!"

1 ответ

Решение

Вместо

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

Пытаться

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

Дайте мне знать, если это имеет какое-либо значение. Компилятор использует разные пути поиска для включений с <> и "". "" являются местными.

Вы также можете попробовать

gcc -Ipath/to/ruby/include/dir example.c
Другие вопросы по тегам