Услышав о mruby , я вдохновил меня на то, чтобы начать изучение программирования на C. Я проработал несколько учебников в Интернете, поэтому я понимаю основы, но теперь я хотел бы начать играть с mruby, составив пример приложения. Я понимаю, как скомпилировать один файл C, но я застрял в попытке выяснить, как скомпилировать mruby вместе со своим собственным кодом.
Я использую GCC в Mac OS X 10.8.
Используя этот пример:
#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 в свой код, чтобы все было скомпилировано?
Обновление: вот структура каталогов того, что у меня есть, обратите внимание на символическую ссылку на каталог include 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
(который в основном только что запустил 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!"
Вместо
#include #include
Пытаться
#include "mruby.h" #include "mruby/compile.h"
Дайте мне знать, если это имеет значение. Компилятор использует разные пути поиска для include с <> и “”. “” являются локальными.
Вы также можете попробовать
gcc -Ipath/to/ruby/include/dir example.c