是否可以安装具有通用(x86_64、arm64)架构支持的 Perl(CPAN)模块?如果是,那又如何?
背景
在基于 arm 的 macOS 计算机上,可以为一个指定的体系结构安装 Perl CPAN 模块,如下所示:
sudo cpan -i Encode
### equivalent since `-arm64` is the native processor in this situation:
sudo arch -arm64 cpan -i Encode
file /Library/Perl/5.30/darwin-thread-multi-2level/auto/Encode/Encode.bundle
# /Library/Perl/5.30/darwin-thread-multi-2level/auto/Encode/Encode.bundle:
# Mach-O 64-bit bundle arm64
sudo arch -x86_64 cpan -i Encode
file /Library/Perl/5.30/darwin-thread-multi-2level/auto/Encode/Encode.bundle
# /Library/Perl/5.30/darwin-thread-multi-2level/auto/Encode/Encode.bundle:
# Mach-O 64-bit bundle x86_64
注意,然而,
perl
本身是一个“通用二进制文件”:
file /usr/bin/perl
# /usr/bin/perl: Mach-O universal binary with 2 architectures:
# [x86_64:Mach-O 64-bit executable x86_64]
# [arm64e:Mach-O 64-bit executable arm64e]
# /usr/bin/perl (for architecture x86_64):
# Mach-O 64-bit executable x86_64
# /usr/bin/perl (for architecture arm64e):
# Mach-O 64-bit executable arm64e
当本机和非本机应用程序共享相同的 Perl 依赖项时,一种架构或另一种架构的 XOR 会出现冲突。 例如,GnuCash Finance::Quote不会 在 Arm 上本地运行,而MacTeX LaTeX Live Update 可以在 Intel 或 Arm 处理器上本地运行。这两个应用程序都使用 Pearl 编码模块.
如果找不到所需的体系结构版本,应用程序日志错误消息将是以下之一:
'/Library/Perl/5.30/darwin-thread-multi-2level/auto/Encode/Encode.bundle'(mach-o 文件,但它是一个不兼容的架构(有 'arm64',需要 'x86_64'))
'/Library/Perl/5.30/darwin-thread-multi-2level/auto/Encode/Encode.bundle'(mach-o 文件,但它是一个不兼容的架构(有'x86_64',需要'arm64'))