无法安装特定的ffi版本。如果我运行gem install ffi,一切正常,但我需要特定的版本1.9.18,它不工作。
Fetching ffi 1.9.18
Installing ffi 1.9.18 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory: /Users/chille/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/ffi-
1.9.18/ext/ffi_c
/Users/chille/.rbenv/versions/2.6.5/bin/ruby -I
/Users/chille/.rbenv/versions/2.6.5/lib/ruby/2.6.0 -r
./siteconf20200928-22154-72wopi.rb extconf.rb
checking for ffi_call() in -lffi... yes
checking for ffi_prep_closure()... yes
checking for ffi_raw_call()... yes
checking for ffi_prep_raw_closure()... yes
checking for shlwapi.h... no
checking for rb_thread_blocking_region()... no
checking for rb_thread_call_with_gvl()... yes
checking for rb_thread_call_without_gvl()... yes
checking for ffi_prep_cif_var()... yes
creating extconf.h
creating Makefile
current directory: /Users/chille/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/ffi-
1.9.18/ext/ffi_c
make "DESTDIR=" clean
current directory: /Users/chille/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/ffi-
1.9.18/ext/ffi_c
make "DESTDIR="
compiling AbstractMemory.c
compiling ArrayType.c
compiling Buffer.c
compiling Call.c
Call.c:355:5: error: implicit declaration of function 'rb_thread_call_without_gvl' is
invalid in C99
[-Werror,-Wimplicit-function-declaration]
rbffi_thread_blocking_region(call_blocking_function, data, (void *) -1, NULL);
^
./Thread.h:78:39: note: expanded from macro 'rbffi_thread_blocking_region'
# define rbffi_thread_blocking_region rb_thread_call_without_gvl
^
1 error generated.
make: *** [Call.o] Error 1
make failed, exit code 2
Gem files will remain installed in
/Users/chille/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/ffi-1.9.18进行检查。结果记录到/Users/chille/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/extensions/x86_64-达尔文-19/2.6.0/ffi-1.9.18/gem_make.out
安装ffi(1.9.18)时出错,Bundler无法继续。在绑定之前确保gem install ffi -v '1.9.18'
成功。
在Gemfile中:bootstrap-sass被解析为3.3.7,这取决于sass被解析为3.5.5,这取决于sass-listen被解析为4.0.0,这取决于rb-inotify被解析为0.9.10,这取决于ffi
5条答案
按热度按时间3pmvbmvn1#
要克服这个错误,请使用以下命令安装ffi:
gem install ffi -v '1.9.18' -- --with-cflags="-Wno-error=implicit-function-declaration"
注意:请确保使用上述示例中正确的
ffi
版本。baubqpgj2#
如果您想捆绑安装ffi 1.9.8
inn6fuwd3#
对于那些谁可以,我认为碰撞ffi版本应该首选在这里。
bundle update ffi
把我从1.9.18
带到了1.13.1
,并为我成功地构建了它。@denis-osmerovic,除非你有另一个依赖项阻止ffi,你也应该能够撞击ffi。检查我的依赖链,我的ffi依赖也来自
rb-inotify
0.9.10
,和你的一样。列出的要求是针对ffi (>= 0.5.0, < 2)
的,因此1.13.1
应该是可以接受的。其他背景:
我以前有一个ffi
1.19.18
的工作副本,我不记得需要传递任何特殊的构建标志。为了重现这一点,我尝试重新安装该版本。我猜其他库或工具链更新在此期间打破了这一点。我在OS X 10.15.7和Xcode 12.0.1上运行Ruby 2.6.3
6g8kf2rb4#
在一辆M1 Catalina 11.6上,我能够通过以下方式克服这个错误:
bundle update ffi
因为我不在乎哪个版本:
gem install ffi -- --with-cflags="-Wno-error=implicit-function-declaration"
如果你需要一个版本,其他的答案都有。
syqv5f0l5#
由于
ffi
gem所做的事情的本质,它与YARV引擎的内部结构紧密相连。因此,您需要确保您使用的YARV版本与ffi
gem的版本相匹配。在2017年,这将是Ruby 2.4。请注意,从2020年4月起,Ruby 2.4不再受支持。