Как скомпилировать пример 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