Невозможно установить обесцененный драгоценный камень

#ruby #rubygems

#ruby #rubygems

Вопрос:

Я пытаюсь отладить код в Rubymine. Похоже, нам нужно сначала установить debase . Я попытался выполнить поиск в Google, но не смог найти никакого решения.

 $ ruby -v
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin20]


$ sudo gem install debase
  Building native extensions. This could take a while...
  ERROR:  Error installing debase:
  ERROR: Failed to build gem native extension.

current directory: /usr/local/lib/ruby/gems/3.0.0/gems/debase-0.2.4.1/ext
/usr/local/opt/ruby/bin/ruby -I /usr/local/Cellar/ruby/3.0.0_1/lib/ruby/3.0.0 -r 
./siteconf20210301-33052-suq8dd.rb extconf.rb
checking for vm_core.h... no
checking for vm_core.h... no
checking for vm_core.h... yes
checking for iseq.h... yes
checking for version.h... yes
checking for vm_core.h... yes
checking for vm_insnhelper.h... yes
checking for vm_core.h... yes
checking for method.h... yes
creating Makefile

current directory: /usr/local/lib/ruby/gems/3.0.0/gems/debase-0.2.4.1/ext
make "DESTDIR=" clean

current directory: /usr/local/lib/ruby/gems/3.0.0/gems/debase-0.2.4.1/ext
make "DESTDIR="
compiling breakpoint.c
compiling context.c
compiling debase_internals.c
debase_internals.c:111:8: error: implicit declaration of function 'RHASH_EMPTY_P' is invalid 
in C99 [-Werror,-Wimplicit-function-declaration]
if (!RHASH_EMPTY_P(catchpoints)) return;
   ^
debase_internals.c:319:25: warning: initializing 'rb_control_frame_t *' (aka 'struct 
rb_control_frame_struct *') with an expression of type 'const rb_control_frame_t *' (aka 
'const struct rb_control_frame_struct *') discards qualifiers [-Wincompatible-pointer-types- 
discards-qualifiers]
rb_control_frame_t *start_cfp = RUBY_VM_END_CONTROL_FRAME(TH_INFO(thread));
                    ^           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
debase_internals.c:768:3: warning: incompatible pointer types passing 'void (VALUE, VALUE)' 
(aka 'void (unsigned long, unsigned long)') to parameter of type 'VALUE (*)(VALUE, VALUE)' 
(aka 'unsigned long (*)(unsigned long, unsigned long)') [-Wincompatible-pointer-types]
rb_define_module_function(mDebase, "set_trace_flag_to_iseq", Debase_set_trace_flag_to_iseq, 1);

^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 /usr/local/Cellar/ruby/3.0.0_1/include/ruby-3.0.0/ruby/internal/anyargs.h:337:142: note: 
expanded from macro 'rb_define_module_function'
#define rb_define_module_function(mod, mid, func, arity)    
RBIMPL_ANYARGS_DISPATCH_rb_define_module_function((arity), (func))((mod), (mid), (func), 
(arity))
                                                                                                                                         
^~~~~~
/usr/local/Cellar/ruby/3.0.0_1/include/ruby-3.0.0/ruby/internal/anyargs.h:273:1: note: 
passing argument to parameter here
RBIMPL_ANYARGS_DECL(rb_define_module_function, VALUE, const char *)
^
/usr/local/Cellar/ruby/3.0.0_1/include/ruby-3.0.0/ruby/internal/anyargs.h:255:72: note: 
expanded from macro 'RBIMPL_ANYARGS_DECL'
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _01(__VA_ARGS__, VALUE(*)(VALUE, VALUE), int); 

                                                                   ^
debase_internals.c:771:3: warning: incompatible pointer types passing 'void (VALUE, VALUE)' 
(aka 'void (unsigned long, unsigned long)') to parameter of type 'VALUE (*)(VALUE, VALUE)' 
(aka 'unsigned long (*)(unsigned long, unsigned long)') [-Wincompatible-pointer-types]
rb_define_module_function(mDebase, "unset_iseq_flags", Debase_unset_trace_flags, 1);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/Cellar/ruby/3.0.0_1/include/ruby-3.0.0/ruby/internal/anyargs.h:337:142: note: 
expanded from macro 'rb_define_module_function'
#define rb_define_module_function(mod, mid, func, arity)    
RBIMPL_ANYARGS_DISPATCH_rb_define_module_function((arity), (func))((mod), (mid), (func), 
(arity))
                                                                                                                                         
^~~~~~
/usr/local/Cellar/ruby/3.0.0_1/include/ruby-3.0.0/ruby/internal/anyargs.h:273:1: note: 
passing argument to parameter here
RBIMPL_ANYARGS_DECL(rb_define_module_function, VALUE, const char *)
^
/usr/local/Cellar/ruby/3.0.0_1/include/ruby-3.0.0/ruby/internal/anyargs.h:255:72: note: 
expanded from macro 'RBIMPL_ANYARGS_DECL'
RBIMPL_ANYARGS_ATTRSET(sym) static void sym ## _01(__VA_ARGS__, VALUE(*)(VALUE, VALUE), int); 
                                                                   ^
3 warnings and 1 error generated.
make: *** [debase_internals.o] Error 1

make failed, exit code 2

Gem files will remain installed in /usr/local/lib/ruby/gems/3.0.0/gems/debase-0.2.4.1 for 
inspection.
Results logged to /usr/local/lib/ruby/gems/3.0.0/extensions/x86_64-darwin-20/3.0.0/debase- 
0.2.4.1/gem_make.out
 

Комментарии:

1. Скорее всего, вы используете древнюю библиотеку или древнюю версию Ruby. Добавьте обе версии в вопрос и ссылку на домашнюю страницу библиотеки.

2. @D.SM Похоже, что он построен на Ruby 3.0.0, так что, если вы не из будущего…

3. Вы пробовали использовать Ruby 2.7.2, чтобы узнать, является ли это специфической особенностью Ruby 3.0? Если это так, вы можете открыть проблему для этого проекта.

4. Вероятно, в этом причина.

5. Я использовал предрелизный gem, и он работал с Ruby 3 gem install debase --pre . Билет здесь github.com/ruby-debug/debase/issues/92