2015-04-02 2 views
0

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

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 (хотя в моих примерах что пошло не так, я просто поместил их в ту же папку, где я компилирую).

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

ответ

2

Вы пытаетесь скомпилировать более новую версию mrbc.c с более старой версией mruby. Эти #define с были добавлены after 1.1.0 was released. Это работает для меня, если я использую версию mruby в настоящее время в мерзавца репо:

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

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

+0

Теперь я получаю что-то еще (это с самым последним из Github, а также с mrbc, что он приходит с): http://pastebin.com/3i3nCXaC Я построил его только с «сделать» – guy0001

+0

Update : Я уверен, что все установлено правильно; все тесты прошли нормально. Все еще хочу знать, почему я не могу их скомпилировать, но я уверен, что это просто потому, что я не делал домашнее задание: я все пойму. Вероятно, следует использовать включенный «rakefile». Не хочу тратить время на чье-то время. Большое спасибо. – guy0001

+0

Выводит ли 'nm <путь к libmruby.a>' имена этих символов? – Dogbert

Смежные вопросы