我正在使用“ffi”,“~> 1.9”,
当我尝试运行我的 Rails 项目时遇到此错误
rake aborted!
LoadError: dlopen(/Users/kanye.west/.rbenv/versions/2.6.9/lib/ruby/gems/2.6.0/gems/ffi-1.9.25/lib/ffi_c.bundle, 0x0009): tried: '/Users/kanye.west/.rbenv/versions/2.6.9/lib/ruby/gems/2.6.0/gems/ffi-1.9.25/lib/ffi_c.bundle' (mach-o file, but is an incompatible architecture (have (x86_64), need (arm64e))) - /Users/kanye.west/.rbenv/versions/2.6.9/lib/ruby/gems/2.6.0/gems/ffi-1.9.25/lib/ffi_c.bundle
/Users/kanye.west/dev/anenta/config/application.rb:14:in `<top (required)>'
/Users/kanye.west/dev/anenta/Rakefile:5:in `require'
/Users/kanye.west/dev/anenta/Rakefile:5:in `<top (required)>'
/Users/kanye.west/.rbenv/versions/2.6.9/bin/bundle:23:in `load'
/Users/kanye.west/.rbenv/versions/2.6.9/bin/bundle:23:in `<main>'
Caused by:
LoadError: cannot load such file -- 2.6/ffi_c
/Users/kanye.west/dev/anenta/config/application.rb:14:in `<top (required)>'
/Users/kanye.west/dev/anenta/Rakefile:5:in `require'
/Users/kanye.west/dev/anenta/Rakefile:5:in `<top (required)>'
/Users/kanye.west/.rbenv/versions/2.6.9/bin/bundle:23:in `load'
/Users/kanye.west/.rbenv/versions/2.6.9/bin/bundle:23:in `<main>'
(See full trace by running task with --trace)
尝试过的方法
gem install --user-install ffi -v '1.9.25' -- --enable-libffi-alloc
gem install ffi -v '1.9.25' -- --with-cflags="-Wno-error=implicit-function-declaration"
gem install ffi -v '1.9.25' --platform=rub
alias gem="arch -x86_64 sudo gem"
CFLAGS="-Wno-error=implicit-function-declaration" RUBY_CONFIGURE_OPTS='--with-readline-dir=/opt/homebrew/opt/readline' gem install ffi -v '1.9.25' -- --with-cflags="-Wno-error=implicit-function-declaration"
您需要使用自制程序安装
libffi
:
brew install libffi
然后安装应该成功:
gem install ffi
我已经在我的 m1 上的 ruby 2.7.2 上测试了这个。
还要确保 libffi 和 ruby/gem 运行在同一架构上。您可能混合了一些 arm64 和 intel 二进制文件,从长远来看,这会导致大量编译器错误。如果遇到“错误架构”错误,请尝试在arm/m1上重新安装ruby/homebrew。
供参考: 我正在使用通过 homebrew 安装的 chruby,并通过
2.7.2
安装 ruby ruby-install
。
Homebrew 和 ruby 都不使用 Rosetta 仿真,而是在 arm64 上编译。我已经使用 libffi
安装了 brew install
,然后使用 ffi
安装了 gem install
,没有任何问题。
pascal@0xc0fefe ~> which ruby
/Users/pascal/.rubies/ruby-2.7.2/bin/ruby
pascal@0xc0fefe ~> which ruby-install
/opt/homebrew/bin/ruby-install
pascal@0xc0fefe ~> file /Users/pascal/.rubies/ruby-2.7.2/bin/ruby
/Users/pascal/.rubies/ruby-2.7.2/bin/ruby: Mach-O 64-bit executable arm64
pascal@0xc0fefe ~> gem install ffi
Building native extensions. This could take a while...
Successfully installed ffi-1.15.5
Parsing documentation for ffi-1.15.5
Done installing documentation for ffi after 0 seconds
1 gem installed
问题是,ffi v 1.14.0中添加了对 M1 的官方支持,因此请尝试更新到该版本,应该不会破坏任何内容。
gem uninstall ffi
并在
Gemfile.lock
中手动更改为 1.14.0。
gem install ffi -v '1.14.0'
这对我有用。
我一直在尝试安装一个演示 React Native 应用程序,它天真地要求运行
pod install
,然后就陷入了这个 ffi
兔子洞。
在我的 M2 / Monterey 上,这篇文章效果很好,除了缺少安装
asdf
的 ruby 插件的说明
asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git
这是我发现有效的唯一解决方法,下载 Rosette,https://support.apple.com/en-us/HT211861,然后卸载(您需要执行此操作,以便处理与当前架构不兼容的任何内容):
并在终端上选择
Get Info
,然后检查 Open using Rosetta
。
现在重新安装
ruby -v
检查并验证您的版本是否有 ... [universal.x86_64-darwin21]