ruby 无法在macos Catalina 上安装ffi -v '1.9.18'

avkwfej4  于 2023-10-18  发布在  Ruby
关注(0)|答案(5)|浏览(176)

无法安装特定的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

3pmvbmvn

3pmvbmvn1#

要克服这个错误,请使用以下命令安装ffi:
gem install ffi -v '1.9.18' -- --with-cflags="-Wno-error=implicit-function-declaration"

注意:请确保使用上述示例中正确的ffi版本。

baubqpgj

baubqpgj2#

如果您想捆绑安装ffi 1.9.8

bundle config --local build.ffi --with-cflags=-Wno-error=implicit-function-declaration

bundle install
inn6fuwd

inn6fuwd3#

对于那些谁可以,我认为碰撞ffi版本应该首选在这里。bundle update ffi把我从1.9.18带到了1.13.1,并为我成功地构建了它。
@denis-osmerovic,除非你有另一个依赖项阻止ffi,你也应该能够撞击ffi。检查我的依赖链,我的ffi依赖也来自rb-inotify0.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

6g8kf2rb

6g8kf2rb4#

在一辆M1 Catalina 11.6上,我能够通过以下方式克服这个错误:
bundle update ffi
因为我不在乎哪个版本:
gem install ffi -- --with-cflags="-Wno-error=implicit-function-declaration"
如果你需要一个版本,其他的答案都有。

syqv5f0l

syqv5f0l5#

由于ffi gem所做的事情的本质,它与YARV引擎的内部结构紧密相连。因此,您需要确保您使用的YARV版本与ffi gem的版本相匹配。
在2017年,这将是Ruby 2.4。请注意,从2020年4月起,Ruby 2.4不再受支持。

相关问题