Mac M1 dyld缺少通过RVM安装Ruby ARM64时调用的符号

ru9i0ody  于 11个月前  发布在  Ruby
关注(0)|答案(2)|浏览(151)

我已经在我值得信赖的M1 Mac上沿着Ruby有一段时间了,没有汗水,特别是在好的旧x86_64模式下(通过RVM安装在Rosetta终端上)。生活很美好。

rvm ls
   ruby-2.7.7 [ x86_64 ]
=* ruby-3.0.5 [ arm64 ]
   ruby-3.0.6 [ x86_64 ]

我决定拥抱原生未来,并以原生arm64模式安装Ruby 3.0.5。小菜一碟,对吧?错了...
当然,它安装顺利,它甚至看起来像它的行为。我很高兴地通过bundle install安装了我的Rails gem,以为我是清白的。但是当我尝试启动我的Rails应用程序时,我得到了这样一条令人愉快的消息:

dyld[*****]: missing symbol called

我甚至重新安装了libffi西斯arm 64自制软件,因为它可以根据我在网络上找到的一些说明,但在rvm reinstall s上没有成功,因为它最终以同样的错误失败而告终。
我找到了this related SO post,但它不适用于我,因为它与mysql相关-我的项目使用postgres。还有另一个悲伤,孤独的StackOverflow post没有答案,就像在照镜子一样。一个悲伤的,未解决的镜子...
我重新安装了libyaml和libffi,在重新安装Ruby之前,没有运气。设置LDPFlags指向ffi二进制文件,也没有运气。我在网上查了所有能查到的都没解决...

yks3o0rb

yks3o0rb1#

它要么是带有本机扩展的gem(最有可能),要么是您通过Rosetta安装的其他lib/二进制文件。
假设错误中没有其他信息,我们需要尝试用猎枪而不是手术刀来解决这个问题。所以我会从完全删除/重新安装rvm开始(事实上,我会借此机会 * 升级 * 到asdf),这样你就可以知道没有一个带有本地扩展的gem是在Intel/Rosetta模式下构建的。
如果这不起作用,那么用自制软件重复。

flmtquvp

flmtquvp2#

我希望没有人经历过这一点,但如果你像我一样不幸,这就是我如何设法解决它:
打开一个arch x86_64 terminal会话,卸载x86_64 Homebrew及其所有已安装的lib(您确实需要在x86_64模式下打开终端,否则卸载脚本将删除arm64 Homebrew的内容):

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"

Reinstall rvm现在在ARM64终端中:

\curl -sSL https://get.rvm.io | bash

此时,安装过程应该会失败,无法准确显示哪个动态库不存在。在我的情况下,它是libgmp

Downloading https://github.com/rvm/rvm/archive/master.tar.gz
Upgrading the RVM installation in /Users/andyruizgarramones/.rvm/
    RVM PATH line found in /Users/andyruizgarramones/.mkshrc /Users/andyruizgarramones/.profile /Users/andyruizgarramones/.bashrc.
    RVM PATH line not found for Zsh, rerun this command with '--auto-dotfiles' flag to fix it.
    RVM sourcing line found in /Users/andyruizgarramones/.profile /Users/andyruizgarramones/.bash_profile /Users/andyruizgarramones/.zlogin.
    Installing rvm gem in 2 gemsets./scripts/functions/gemset: line 134: 68320 Abort trap: 6           "${rvm_ruby_binary}" -rrubygems -e "$gem_spec" 2> /dev/null
dyld[68326]: Library not loaded: /usr/local/opt/gmp/lib/libgmp.10.dylib

你现在应该没事了,因为你现在可以看到什么是错的,并搜索如何修复它。在我的例子中,我必须重新安装gmp,还要处理cmakepkg-config

brew reinstall gmp
brew link gmp
brew reinstall cmake
brew reinstall pkg-config && brew unlink pkg-config && brew link pkg-config

相关问题