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

Posted

技术标签:

【中文标题】M1(Apple Silicon)上的 CocoaPods 因 ffi 架构错误而失败【英文标题】:CocoaPods on M1 (Apple Silicon) fails with ffi wrong architecture 【发布时间】:2021-06-13 02:17:49 【问题描述】:

由于 ffi 问题,我在 M1 MacBook 上运行“pod install”失败,如 here 所述。

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

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

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

顺便说一下,其中一个建议的解决方法对我来说没有成功。当我尝试时:

sudo arch -x86_64 gem install ffi

我明白了:

arch: posix_spawnp: gem: Bad CPU type in executable

不确定这是否相关。

【问题讨论】:

【参考方案1】:

对我来说,在关注@Datasun 之后,我不得不做这些额外的事情:

brew install ruby

echo 'export PATH="/opt/homebrew/opt/ruby/bin:$PATH"' >> ~/.zshrc

【讨论】:

【参考方案2】:

我同意 Datasun 的回答。但是我设法遵循了大致相同的步骤,这些步骤产生了一个有效的结果,我认为它更好或一样好。我在终端运行了这些行:

brew uninstall --ignore-dependencies ruby

然后

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

之后我想自制可可足类,所以我使用了:

brew install cocoapods

(您可能需要重新安装)

【讨论】:

【参考方案3】:

正如 Datasun 所说,我删除了 cocoapods

gem list --local | grep cocoapods | awk 'print $1' | xargs sudo gem uninstall

然后运行:

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

没有任何问题。

【讨论】:

这太棒了,感谢您让复制和粘贴变得更容易 对于任何尝试上述方法并收到no podfile 错误的人的后代,我运行了上述不包括pod install 然后运行bundle install,现在运行顺利 这仍然失败:sudo arch -x86_64 gem install ffi。还有其他命令可以尝试吗? 你节省了我的一天,但我使用带有 M1 芯片的 Mac 并且在安装 rbenv 3.0.1 之前,我按照***.com/questions/66128681/…中的步骤进行操作 这有帮助,谢谢【参考方案4】:

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

这些是我为恢复工作状态(并为 ffi 应用 M1 变通办法)所做的步骤:

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

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

sudo gem uninstall cocoapods

sudo gem uninstall cocoapods-core

sudo gem uninstall cocoapods-downloader

等等

    下一步,我能够重新安装 ffi 和 CocoaPods:

sudo arch -x86_64 gem install ffi

sudo arch -x86_64 gem install cocoapods

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

【讨论】:

最后我发现这个解决方案有效,我尝试了一切,从使用 rbenv 安装新版本的 ruby​​,更新所有依赖项。谢谢你:) 谢谢,完美解决问题。非常感谢! 谢谢,完美解决了 MacBook Air m1 Flutter 项目设置问题。 这就是解决方案!!!非常感谢 brew uninstall --ignore-dependencies ruby​​ 是必需的,而不是 brew uninstall ruby​​ --force

以上是关于M1(Apple Silicon)上的 CocoaPods 因 ffi 架构错误而失败的主要内容,如果未能解决你的问题,请参考以下文章

Docker buildx 与 Apple M1 Silicon 上的节点应用程序 -standard_init_linux.go:211:exec 用户进程导致“exec 格式错误”

如何在 Apple Silicon (ARM / M1) 上安装 SciPy

解决在Apple Silicon (M1)安装php MongoDB扩展失败

在 Apple Silicon M1 Mac 上安装 Cryptography

在 M1 芯片上运行 rails 时出错(Apple Silicon)

Android Emulator 在 M1 mac/Apple Silicon 上卡住了加载屏幕