将 Perl 模块安装为“通用”(x86_64、arm64)?

问题描述 投票:0回答:0

是否可以安装具有通用(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'))

perl x86-64 cpan apple-silicon
© www.soinside.com 2019 - 2024. All rights reserved.