我在 Ruby 和 React-native 世界中拥有工具版本管理器,它们(在抽象层之下)最终使用相当普通的方式从源代码构建像 Ruby 这样的软件:
./configure
./make
./make install
...将各种选项从上面的抽象传递到这些命令中。
在我的 M1 MacBook Pro 上,我发现我必须小心地传递命令行选项,以使构建了解我正在运行的架构。例如:
export CONFIGURE_OPTS="--build aarch64-apple-darwin20"; asdf install ruby 2.6.6
asdf install
...防止配置因诸如 之类的错误而中断machine not recognised
。
深入挖掘,我可以config.sub
在构建目录中看到一个2007年创建的文件。它对arm64架构一无所知。
我相当确定问题就在这里,因为./configure
如果我替换另一个项目中的 2021 版本 config.sub 并重试,就会成功。
我很惊讶地发现,在 M1 机器上以完全相同的asdf install...
流程安装相同软件的同事没有任何此类麻烦。
这不是asdf
特定的,我对 CocoaPods 安装的依赖项有同样的问题,这也是在所有使用configure
和 的基础上的make
,同样我的同事也没有任何问题。
其他人的机器(或我的机器)上的某些内容会覆盖 config.sub 的结果,或者必须为他们提供 config.sub 的不同副本。我很困惑。
更新:“工作”机器和我的机器之间的一个显着差异似乎是 uname 的输出:
矿:
Darwin 192.168.1.102 20.6.0 Darwin Kernel Version 20.6.0: Wed Jun 23 00:26:27 PDT 2021; root:xnu-7195.141.2~5/RELEASE_ARM64_T8101 arm64 arm64 MacBookPro17,1 Darwin
其他的':
Darwin Joes-MacBook-Pro.local 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:31 PDT 2021; root:xnu-7195.121.3~9/RELEASE_ARM64_T8101 arm64
特别是关于别人的机器和我的机器的uname -p
报告。arm
arm64