- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
先说解决方法, 感兴趣的可以了解事情的经过, 也许我描述的问题不专业, 但确实解决了当下的问题, 欢迎留言讨论 。
这里主要是两个问题, 一个是启用rosetta模式失败, 一个是架构混合导致项目跑不起来 。
rosetta
模式失败执行 arch -x86_64 zsh报arch: posix_spawnp: zsh: Bad CPU type in executable 原因: 未安装rosetta 。
执行softwareupdate --install-rosetta安装rosetta报 。
Package reference com.apple.pkg.RosettaUpdateAuto is missing installKBytes attribute
原因: 系统版本低无法安装, 更新系统 。
在arm64架构下安装了brew, 执行arch -x86_64 zsh后, 导致brew安装了x86架构的命令工具, 通过rvm安装ruby时又因为brew的架构只能安装arm64的, 运行项目时报 。
LoadError - dlopen(/Users/q/.rvm/gems/ruby-2.7.2/gems/nkf-0.2.0/lib/nkf.bundle, 0x0009): tried: '/Users/q/.rvm/gems/ruby-2.7.2/gems/nkf-0.2.0/lib/nkf.bundle' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/q/.rvm/gems/ruby-2.7.2/gems/nkf-0.2.0/lib/nkf.bundle' (no such file), '/Users/q/.rvm/gems/ruby-2.7.2/gems/nkf-0.2.0/lib/nkf.bundle' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')) - /Users/q/.rvm/gems/ruby-2.7.2/gems/nkf-0.2.0/lib/nkf.bundle
原因: brew安装了不同架构的命令工具 解决方法: 统一架构, 先卸载brew, 统一安装x86架构的工具 在你执行了arch -x86_64 zsh, 且安装了brew的情况下 不妨检查一下安装的brew的架构 。
which brew
# 这是x86模式下安装的brew
/usr/local/bin/brew
# 这是arm模式下安装的brew
/opt/homebrew
公司配了一台M3的MacBook Pro, 配置确实高, 速度也很快 。
作为一个前端开发, nodejs必不可少, 公司项目需要用到低版本的nodejs(<=14), 这里我们一般会用到nvm管理nodejs版本 。
所以, 第一步, 安装nvm 。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
对了, 一般咱们还会使用iterm2替代mac的终端, 并使用zsh作为shell解释器, 是的, 再安装一个oh-my-zsh 。
这个时候你应该能执行nvm命令了 。
# 列出所有可以安装的 Node.js 版本
nvm ls-remote
# 安装最新的稳定版
nvm install latest
安装14以后的版本(>=15)是没问题的, 安装12会有一大堆编译信息, 等待十多分钟会发现报错, 无法使用 。
使用rosetta模式 。
在 Apple Silicon Macs 上,你可以使用 Rosetta 2 来运行 x86_64 架构的应用程序,包括终端 shell。使用 arch -x86_64 zsh 命令可以启动一个通过 Rosetta 2 运行的 zsh shell,这样你就可以在 x86_64 环境中运行命令和安装软件.
arch -x86_64 zsh
正常情况下, 咱执行会提示安装 Rosetta 2 , 如果已经安装则没有反馈, 然后就可以执行 nvm install 12 安装nodejs了 。
天有不测风云, 我居然报错了 。
arch: posix_spawnp: zsh: Bad CPU type in executable
这就让我觉得莫名其妙了 。
通过搜索, 我明白我需要先安装Rosetta 2, 可以通过执行 。
softwareupdate --install-rosetta
正常情况下, 也是等待安装即可 。
而我, 又掉坑里了 。
Package reference com.apple.pkg.RosettaUpdateAuto is missing installKBytes attribute
我开始怀疑人生了, 好在我发现可能和系统版本有关, 于是我果断升级系统 。
确实好了, nodejs环境确实没问题了 。
现在需要运行ios项目, 统一使用2.7.2的ruby, 电脑自带的是2.6, 没办法, 最好用一个ruby的版本管理工具 -- rvm 。
安装rvm需要有brew, 聪明的我在执行 arch -x86_64 zsh 之前就已经安装好了, 我真是个 小机灵鬼 。
很快, 我就为自己的行为付出了代价 。
由于我在执行arch -x86_64 zsh 之前安装的brew, 所以brew安装的工具都是arm64架构的, 这个时候我安装 gnupg 提示我 。
Error: Cannot install under Rosetta 2 in ARM default prefix (/opt/homebrew)!
To rerun under ARM use:
arch -arm64 brew install ...
To install under x86_64, install Homebrew into /usr/local.
这个时候我就执行arch -arm64 brew install gnupg安装了arm64架构的gnupg(我也不知道干嘛的), 这个时候工具的依赖也安装的arm64架构的 。
在我安装其他依赖的时候, 也开始提醒我使用arm架构的方式安装 。
没错, 后来我安装了rvm, 在x86模式下, 使用arm64架构的brew安装的rvm, 你猜它是什么架构 -- 还是arm64架构 。
我终于可以执行 rvm install 2.7.2 安装指定版本的ruby了, 我发现安装不上, 聪明的我果然通过 arch -arm64 rvm install 2.7.2的方式安装上了arm64架构的ruby 。
于是我满心欢喜的去安装项目依赖了, 噩梦开始了 。
类似ges: autoconf, automake, libtool, pkg-config, coreutils, libyaml, libksba, readline, zlib, openssl@1.1 这些依赖, 我安装的应该是x86架构的, 这里项目用到了bundler , 是啥不重要, 就是一个工具, 跟着敲命令就完了 。
执行 bundler install 安装项目依赖, 然后又执行 bundle exec pod install, 这个时候问题出现了 。
LoadError - dlopen(/Users/q/.rvm/gems/ruby-2.7.2/gems/nkf-0.2.0/lib/nkf.bundle, 0x0009): tried: '/Users/q/.rvm/gems/ruby-2.7.2/gems/nkf-0.2.0/lib/nkf.bundle' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/q/.rvm/gems/ruby-2.7.2/gems/nkf-0.2.0/lib/nkf.bundle' (no such file), '/Users/q/.rvm/gems/ruby-2.7.2/gems/nkf-0.2.0/lib/nkf.bundle' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')) - /Users/q/.rvm/gems/ruby-2.7.2/gems/nkf-0.2.0/lib/nkf.bundle
我看到了have 'x86_64', need 'arm64e' or 'arm64', 我就知道事情不对了, 我又把这些工具库换成arm64架构的, 还是跑不起来, 开始怀疑人生了, 于是和同事对了一下工具的版本号 。
我意识到ruby是arm64架构的, 导致x86的工具不能使用, 但是我又装不上x86的ruby, 一想到ruby, 我想着不用rvm管理版本, 直接下载一个, 确实也奏效了, 我逐渐意识到了问题的所在 。
ruby -v
# ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-darwin24]
这里我已经换上了x86的ruby 。
在网上搜到了这个代码 。
brew config
HOMEBREW_VERSION: 4.3.24
ORIGIN: https://github.com/Homebrew/brew
HEAD: 916044581862c32fc2365e8e9ff0b1507a98925e
Last commit: 2 days ago
Core tap JSON: 24 Sep 09:41 UTC
Core cask tap JSON: 24 Sep 09:41 UTC
HOMEBREW_PREFIX: /usr/local
HOMEBREW_CASK_OPTS: []
HOMEBREW_MAKE_JOBS: 12
Homebrew Ruby: 3.3.4 => /usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/3.3.4_1/bin/ruby
CPU: dodeca-core 64-bit westmere
Clang: 16.0.0 build 1600
Git: 2.39.5 => /Applications/Xcode.app/Contents/Developer/usr/bin/git
Curl: 8.7.1 => /usr/bin/curl
macOS: 15.0-x86_64
CLT: 16.0.0.0.1.1724870825
Xcode: 16.0
Rosetta 2: true
乍一看确实是-x86_64, 本着怀疑态度, 我执行了 arch -arm64 brew config 。
HOMEBREW_VERSION: 4.3.24
ORIGIN: https://github.com/Homebrew/brew
HEAD: 916044581862c32fc2365e8e9ff0b1507a98925e
Last commit: 2 days ago
Core tap JSON: 24 Sep 09:41 UTC
Core cask tap JSON: 24 Sep 09:41 UTC
HOMEBREW_PREFIX: /usr/local
HOMEBREW_CASK_OPTS: []
HOMEBREW_MAKE_JOBS: 12
Homebrew Ruby: 3.3.4 => /usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/3.3.4_1/bin/ruby
CPU: dodeca-core 64-bit westmere
Clang: 16.0.0 build 1600
Git: 2.39.5 => /Applications/Xcode.app/Contents/Developer/usr/bin/git
Curl: 8.7.1 => /usr/bin/curl
macOS: 15.0-arm64
CLT: 16.0.0.0.1.1724870825
Xcode: 16.0
Rosetta 2: false
因为我是在arm64的架构下安装的brew, 然后执行的arch -x86_64 zsh修改终端的架构为x86 。
其实很简单, 看brew的执行路径 。
which brew
# 这是x86模式下安装的brew
/usr/local/bin/brew
# 这是arm模式下安装的brew
/opt/homebrew
配置环境的时候, 统一版本很重要, 有时候一个小版本都会导致项目运行差异, 真可谓是 差之毫厘谬以千里 。
咱们遇到的这些问题, 都是处理器架构导致的, 我们要尽可能统一开发环境 。
这次踩坑的原因有两个 。
正常情况下, 拿着 M芯片 的mac, 一定要注意架构差异 。
最后此篇关于macM1,M2,M3芯片踩坑nodejsrubybrew的文章就讲到这里了,如果你想了解更多关于macM1,M2,M3芯片踩坑nodejsrubybrew的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
当我们浏览网页时,我们想对网页内容如文章、评论中的观点持赞同或反对意见时,可以通过点击网页中的“顶”和“踩”来进行投票。而整个交互过程,开发者可以通过ajax异步来实现,从而提高用户体验
我以为我了解了python中列表切片的基础知识,但是在切片上使用负步骤时收到了意外错误,如下所示: >>> a = list(range(10)) >>> a [0, 1, 2, 3, 4, 5, 6
本文实例为大家分享了基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码,供大家参考,具体内容如下 数据库操作: ?
我是一名优秀的程序员,十分优秀!