Почему некоторые примеры mruby не компилируются?

Я пытался настроить mruby для использования в C, но мне удалось скомпилировать только простой пример «hello world». Другие примеры не компилируются: когда я пытаюсь скомпилировать https://github.com/mruby/mruby/blob/master/tools/mrbc/mrbc.c, я получаю это:

gcc -Iinclude hello.c libmruby_core.a libmruby.a -lm -o hello
hello.c: In function ‘parse_args’:
hello.c:119:24: error: ‘DUMP_DEBUG_INFO’ undeclared (first use in this function)
         args->flags |= DUMP_DEBUG_INFO;
                        ^
hello.c:119:24: note: each undeclared identifier is reported only once for each function it appears in
hello.c:122:23: error: ‘DUMP_ENDIAN_BIG’ undeclared (first use in this function)
         args->flags = DUMP_ENDIAN_BIG | (args->flags & DUMP_DEBUG_INFO);
                       ^
hello.c:125:23: error: ‘DUMP_ENDIAN_LIL’ undeclared (first use in this function)
         args->flags = DUMP_ENDIAN_LIL | (args->flags & DUMP_DEBUG_INFO);
                       ^
hello.c:154:57: error: ‘DUMP_ENDIAN_MASK’ undeclared (first use in this function)
   if (args->verbose && args->initname && (args->flags & DUMP_ENDIAN_MASK) == 0) {

Когда я пытаюсь скомпилировать «более сложный пример» из http://matt.aimonetti.net/posts/2012/04/25/getting-started-with-mruby/, как они предлагают (gcc -Iinclude hello.c lib/libmruby.a -lm -o hello.out) (на самом деле: похожим образом. Я попробовал оба пути.) Я получаю это:

gcc -Iinclude hello.c libmruby.a -lm -o hellohello.c: In function ‘main’:
hello.c:17:7: error: too few arguments to function ‘mrb_parse_string’
   p = mrb_parse_string(mrb, code);
       ^
In file included from /home/neo/Projects/MrubyHs/mruby-1.1.0/include/mruby/irep.h:14:0,
                 from /home/neo/Projects/MrubyHs/mruby-1.1.0/include/mruby/proc.h:10,
                 from hello.c:6:
/home/neo/Projects/MrubyHs/mruby-1.1.0/include/mruby/compile.h:170:34: note: declared here
 MRB_API struct mrb_parser_state* mrb_parse_string(mrb_state*,const char*,mrbc_context*);
                                  ^
hello.c:19:5: warning: assignment makes integer from pointer without a cast
   n = mrb_generate_code(mrb, p);
     ^
hello.c:20:37: error: ‘mrb_state’ has no member named ‘irep’
   mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));
                                     ^

Похоже, мне не хватает какого-то файла или чего-то еще, но я не уверен, что именно. Я использую mruby 1.1.0. У меня есть mruby-1.1.0/include, который содержит mrbconf.h, mruby.h и папку mruby в пути поиска gcc, и mruby-1.1.0/build/host/lib в LIBRARY_PATH (хотя в моих примерах что пошло не так, я просто положил их в ту же папку, где я компилирую).

Любая идея, что не так с моей установкой и/или как я компилирую?


person guy0001    schedule 02.04.2015    source источник


Ответы (1)


Вы пытаетесь скомпилировать более новую версию mrbc.c со старой версией mruby. Эти #define были добавлены после выпуска версии 1.1.0. У меня это работает, если я использую версию mruby, которая сейчас находится в репозитории git:

$ make
...
$ gcc -Iinclude build/host/lib/libmruby.a mrbc.c
$ ./a.out
./a.out: no program file given

Что касается второй проблемы, mrb_parse_string был изменен, чтобы принимать mrb_context* в качестве третьего аргумента 2012, поэтому вы можете обновить свой код, чтобы использовать новый API.

person Dogbert    schedule 02.04.2015
comment
Теперь я получаю кое-что еще (это самое последнее из Github, а также mrbc, с которым оно поставляется): pastebin.com /3i3nCXaC Я также собрал его с помощью make - person guy0001; 02.04.2015
comment
Обновление: я почти уверен, что все установлено правильно; все тесты прошли нормально. Все еще хочу знать, почему я не могу их скомпилировать, но я уверен, что это просто потому, что я не сделал домашнюю работу: я разберусь. Вероятно, следует использовать включенный rakefile. Не хочу тратить ничье время. Спасибо большое. - person guy0001; 02.04.2015
comment
Выводит ли nm <path to libmruby.a> имена этих символов? - person Dogbert; 02.04.2015
comment
Да они все там - person guy0001; 02.04.2015