web-dev-qa-db-fra.com

Pourquoi le simulateur iOS nécessite-t-il les symboles i386 et x86_64 alors que je suis uniquement sur un système x86_64?

J'essaie de faire fonctionner une application sur le simulateur qui a déjà rencontré des problèmes auparavant. Libjpeg.a n'est pas construit pour i386, mais il a x86_64. C’est la seule dépendance qui reste, mais je me demande pourquoi j’ai besoin de symboles i386, si j’exécute sur un mac x86_64.

18
Joey Carson

Le simulateur iOS peut exécuter votre application en modes 32 et 64 bits. Cela vous permet de résoudre un grand nombre de problèmes 64 bits et de vous assurer qu'il est prêt pour armv7 et arm64. Pour ce faire, il compile votre application pour i386 et x86_64 et requiert les bibliothèques pour les deux architectures.

19

en fait, l'architecture i386 est destinée au simulateur iPhone, tandis que l'architecture x86_64 est destinée aux simulateurs iPad, les deux étant compatibles 32 et 64 bits.

12
Syed Ali Salman

les applications iOS doivent fonctionner sur de nombreuses architectures différentes:

arm7: Used in the oldest iOS 7-supporting devices
arm7s: As used in iPhone 5 and 5C
arm64: For the 64-bit ARM processor in iPhone 5S
i386: For the 32-bit simulator
x86_64: Used in 64-bit simulator
10
Naishta

Alors que ces jours-ci, j'ai essayé d'exécuter Fastlane pour obtenir une capture d'écran iOS, j'ai trouvé la même situation: comme il y a une bibliothèque .a qui ne contient qu'une architecture x86_64, mais sans architecture i386, j'ai eu cette erreur: 

Undefined symbol(s) for architecture i386

Ceci fonctionne sur le simulateur iPhone 8 avec iOS 11.4.

Mais vous pouvez forcer le simulateur à s'exécuter uniquement sur 64-bit ou uniquement 32-bit comme suit:

Project -> Architectures -> set the value as:$(ARCHS_STANDARD_32_BIT) or $(ARCHS_STANDARD_64_BIT)
0
ifeegoo