34 votes

Comment puis-je distinguer les binaires ARM des binaires x86 sous MacOS ?

Y a-t-il quelque chose que je peux taper sur la ligne de commande pour déterminer si un exécutable est une M1 ou un binaire x86 ?

55voto

Gordon Davisson Points 30215

Vous pouvez utiliser le file pour savoir pour quelles architectures un binaire (ou une bibliothèque) inclut du code natif. Le processeur M1 utilise l'architecture ARM 64 bits, il sera donc listé comme "arm64". Je n'ai pas de Mac M1 ou de binaires ARM uniquement sous la main, mais je compare Chrome (Intel uniquement) et Firefox (binaire "universel"/"gros" supportant à la fois Intel et ARM) sur mon Mac :

$ file /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome 
/Applications/Google Chrome.app/Contents/MacOS/Google Chrome: Mach-O 64-bit executable x86_64

$ file /Applications/Firefox.app/Contents/MacOS/firefox
/Applications/Firefox.app/Contents/MacOS/firefox: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64:Mach-O 64-bit executable arm64]
/Applications/Firefox.app/Contents/MacOS/firefox (for architecture x86_64): Mach-O 64-bit executable x86_64
/Applications/Firefox.app/Contents/MacOS/firefox (for architecture arm64):  Mach-O 64-bit executable arm64

Et voici une bibliothèque :

$ file /Applications/Firefox.app/Contents/MacOS/libmozglue.dylib 
/Applications/Firefox.app/Contents/MacOS/libmozglue.dylib: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit dynamically linked shared library x86_64] [arm64:Mach-O 64-bit dynamically linked shared library arm64]
/Applications/Firefox.app/Contents/MacOS/libmozglue.dylib (for architecture x86_64):    Mach-O 64-bit dynamically linked shared library x86_64
/Applications/Firefox.app/Contents/MacOS/libmozglue.dylib (for architecture arm64): Mach-O 64-bit dynamically linked shared library arm64

Mise à jour : J'ai vérifié un Mac M1, et il semble qu'il ait des binaires gras Intel+ARM (ce qui est identique à Big Sur installé sur un Mac Intel) :

$ file /System/Applications/Chess.app/Contents/MacOS/Chess 
/System/Applications/Chess.app/Contents/MacOS/Chess: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e]
/System/Applications/Chess.app/Contents/MacOS/Chess (for architecture x86_64):  Mach-O 64-bit executable x86_64
/System/Applications/Chess.app/Contents/MacOS/Chess (for architecture arm64e):  Mach-O 64-bit executable arm64e

Notez que l'architecture est listée comme "arm64". e ". Le "e" est un indicateur de sous-architecture ; voir cette question pour plus d'informations. En regardant dans /usr/share/file/magic/mach (qui contient les codes magiques file utilise pour reconnaître ces types de fichiers), il y a aussi une sous-architecture "arm64_v8" (qui, je pense, n'a pas encore été reconnue par l'entreprise). cette question adresses).

Et juste pour le plaisir, voici l'application Chess de la version 10.5 d'OS X, qui comprenait du code natif pour PowerPC et Intel, à la fois en 32 et 64 bits :

$ file /Applications/Chess.app/Contents/MacOS/Chess 
/Applications/Chess.app/Contents/MacOS/Chess: Mach-O universal binary with 4 architectures
/Applications/Chess.app/Contents/MacOS/Chess (for architecture ppc):    Mach-O executable ppc
/Applications/Chess.app/Contents/MacOS/Chess (for architecture ppc64):  Mach-O 64-bit executable ppc64
/Applications/Chess.app/Contents/MacOS/Chess (for architecture i386):   Mach-O executable i386
/Applications/Chess.app/Contents/MacOS/Chess (for architecture x86_64): Mach-O 64-bit executable x86_64

27voto

Oskar Points 1242

Sous MacOS, vous pouvez avoir trois types d'applications en cours de construction, A, B et AB. lipo révèle les étapes de construction choisies par le développeur.

% lipo -archs /System/Applications/Mail.app/Contents/MacOS/Mail
x86_64 arm64

Apple documente cela dans un long article - allez à la partie où il décrit les étapes de construction en ligne de commande pour les deux "saveurs" de l'actuel binaire et le lipo qui mélange un binaire universel à partir des deux. Le site -cible est ce qui fait qu'un binaire a un format spécifique (pas seulement x86_64 mais Apple et lié à une version spécifique de MacOS SDK).

x86_app: main.c
    $(CC) main.c -o x86_app -target x86_64-apple-macos10.12
arm_app: main.c
    $(CC) main.c -o arm_app -target arm64-apple-macos11
universal_app: x86_app arm_app
    lipo -create -output universal_app x86_app arm_app

Pour voir les architectures présentes dans un fichier exécutable construit, exécutez la commande lipo o file outils de ligne de commande.

Notez que les outils fonctionnent sur des binaires intégrés au cadre de l'application, par opposition au dossier/package de l'application que la plupart des gens appellent "l'application".

El file est plus verbeuse, je préfère donc lipo pour les contrôles par script ou pour obtenir les détails d'un binaire.

4voto

SiliconChaos Points 73

En plus des commandes de terminal fournies, il existe quelques applications d'interface graphique à cette fin.

  • Infos sur le silicium : Cette application fournit un simple indicateur dans la barre de menu pour savoir si l'application au premier plan est exécutée nativement ou via Rosetta.
  • Silicium : Cette application recherche toutes les applications et indique leur compatibilité avec le processeur dans une liste consultable.

3voto

nullspace Points 101

Vous pouvez obtenir le type de processeur d'un exécutable en utilisant objdump outil

objdump -x --macho ./an-exec| grep -A1 cputype

Cela montrera X86_64 pour les binaires x86 et ARM64 pour une Apple siliconée binaire

Alternativement, vous pouvez vérifier la même chose avec file cmd.

file ./an-exec

pour x86, vous verrez Mach-O 64-bit executable x86_64

pour arm64 (apple silicon) vous verrez Mach-O 64-bit executable arm64

pour le binaire universel, vous verrez Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64:Mach-O 64-bit executable arm64]

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X