M1 (Apple Silicon) 上的 CocoaPods 因 ffi 错误的架构而失败

Dat*_*sun 10 ffi rosetta cocoapods apple-m1

运行“POD安装”在M1的MacBook失败对我来说由于FFI问题,如所描述这里

我遵循了一些解决方法(我想我以各种顺序尝试了所有方法),但现在我得到了一个稍微不同的错误:

LoadError - dlopen(/opt/homebrew/lib/ruby/gems/3.0.0/gems/ffi-1.15.0/lib/ffi_c.bundle, 9): no suitable image found.  Did find:
    /opt/homebrew/lib/ruby/gems/3.0.0/gems/ffi-1.15.0/lib/ffi_c.bundle: mach-o, but wrong architecture
    /opt/homebrew/lib/ruby/gems/3.0.0/gems/ffi-1.15.0/lib/ffi_c.bundle: mach-o, but wrong architecture - /opt/homebrew/lib/ruby/gems/3.0.0/gems/ffi-1.15.0/lib/ffi_c.bundle
Run Code Online (Sandbox Code Playgroud)

所以,似乎我现在有 ffi,但架构错误?我怎样才能解决这个问题?在 Rosetta 模式下运行/不运行终端会发生这种情况。

顺便说一句,建议的解决方法之一对我来说没有成功。当我尝试:

sudo arch -x86_64 gem install ffi
Run Code Online (Sandbox Code Playgroud)

我得到:

arch: posix_spawnp: gem: Bad CPU type in executable
Run Code Online (Sandbox Code Playgroud)

不确定这是否相关。

小智 32

我同意Datasun的回答。但我设法遵循大致相同的步骤,得到了一个有效的结果,我认为更好或同样好。我在终端中运行了以下行:

brew uninstall --ignore-dependencies ruby
Run Code Online (Sandbox Code Playgroud)

然后

sudo gem uninstall cocoapods
sudo gem uninstall cocoapods-core
sudo gem uninstall cocoapods-downloader
Run Code Online (Sandbox Code Playgroud)

之后我想自制 cocoapods 所以我用了:

brew install cocoapods
Run Code Online (Sandbox Code Playgroud)

(您可能需要使用重新安装)


Dat*_*sun 18

回答我自己的问题。我通过卸载有问题的 Ruby 版本和 CocoaPods 修复了 ffi 问题,然后我使用 -x86_64 arch 重新安装了 ffi 和 CocoaPods。

这些是我恢复到工作状态(并为 ffi 应用 M1 解决方法)的步骤:

  1. 使用以下命令卸载 Ruby: brew uninstall ruby --force

  2. 卸载 CocoaPods。首先,尝试列出所有 CocoaPods 版本/组件gem list --local | grep cocoapods。然后将它们一一卸载,就我而言:

sudo gem uninstall cocoapods

sudo gem uninstall cocoapods-core

sudo gem uninstall cocoapods-downloader

等等。

  1. 作为下一步,我能够重新安装 ffi,然后重新安装 CocoaPods:

sudo arch -x86_64 gem install ffi

sudo arch -x86_64 gem install cocoapods

完成后,我可以pod install按预期运行。请注意,我一直在标准模式下打开终端 - 不需要 Rosetta。


Nem*_*ion 17

我几乎尝试了所有方法,这是唯一对我有用的解决方案:

通过gem卸载cocoapods包

sudo gem uninstall cocoapods
Run Code Online (Sandbox Code Playgroud)

并用自制程序重新安装它

brew install cocoapods
Run Code Online (Sandbox Code Playgroud)

解决了我的问题。

问题是我cocoapods通过 gem install 而不是 homebrew 安装的。


Mag*_*ern 13

我通过首先清理所有以前安装的 Pod 来使其工作: pod deintegrate 然后使用以下命令再次安装它们: arch -x86_64 pod install

  • 这对我在 Mac M1 上有效 (2认同)

bur*_*vyg 7

正如Datasun所说,我删除了cocoapods

gem list --local | grep cocoapods | awk '{print $1}' | xargs sudo gem uninstall
Run Code Online (Sandbox Code Playgroud)

然后运行:

brew remove rbenv
sudo rm -rf ~/.rbenv
sudo arch -x86_64 gem install ffi
sudo arch -x86_64 gem install cocoapods
brew install rbenv
rbenv install 3.0.1
rbenv global 3.0.1

pod install
Run Code Online (Sandbox Code Playgroud)

没有任何问题。

  • 这仍然失败:“sudo arch -x86_64 gem install ffi”。还有其他命令可以尝试吗? (3认同)

小智 7

我在使用 m1 芯片的新 MacBook 上设置电容器项目时遇到此错误。但是,如果您想使用电容器、flutter 或 React Native,您将收到此错误,因为这是一个独立于框架、与计算机相关的问题。

您的计算机上必须安装 Ruby 和 cocoapods。就我而言,一一运行以下命令是有效的。

1.

brew install ruby
Run Code Online (Sandbox Code Playgroud)
echo 'export PATH="/opt/homebrew/opt/ruby/bin:$PATH"' >> ~/.zshrc
Run Code Online (Sandbox Code Playgroud)
brew install cocoapods
Run Code Online (Sandbox Code Playgroud)

而且,你现在已经准备好了。

pod install
Run Code Online (Sandbox Code Playgroud)


And*_*row 6

当我尝试 x86_64 时:

sudo arch -x86_64 gem install ffi

linking shared-object ffi_c.bundle
ld: warning: ignoring file /Users/aa/.rbenv/versions/3.0.1/lib/libruby.3.0.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
Undefined symbols for architecture x86_64:
  "_rb_ary_detransient", referenced from:
      _memory_put_array_of_int8 in AbstractMemory.o
Run Code Online (Sandbox Code Playgroud)

所以我尝试了:

sudo arch -arm64e gem install ffi

sudo arch -arm64e gem install cocoapods

然后pod install工作了!

我还必须运行rbenv init并放置 eval~/.zshrc才能使正确的 ruby​​ 版本正常工作。


nat*_*why 5

我同意Datasun的回答。但目前我们可以在 M1 Macbook 中arm64使用。x86_64

我重新安装ruby并在终端中运行以下行:

gem uninstall cocoapods
gem uninstall cocoapods-core
gem uninstall cocoapods-downloader

gem uninstall ffi
gem install ffi
Run Code Online (Sandbox Code Playgroud)