为什么一台 M1 机器需要特定于架构的选项来从源代码构建,而其他 M1 机器不需要?

为什么一台 M1 机器需要特定于架构的选项来从源代码构建,而其他 M1 机器不需要?

我在 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报告。armarm64

相关内容