91 votes

Qu'est-ce que l'erreur "Instruction illégale: 4" et pourquoi "-mmacosx-version-min = 10.x" corrige-t-il ce problème?

Je reçois Illegal Instruction: 4 d'erreurs avec les fichiers binaires compilés avec GCC 4.7.2 sous Mac OS X 10.8.2 ("Montagne du Lion"), lorsque ces binaires sont sous Mac OS X 10.7.x ("Lion") et les versions antérieures. Les fichiers binaires fonctionnent correctement sous Mac OS X 10.8.x.

J'ai ajouté -mmacosx-version-min=10.5 de ma compilation des drapeaux et cela semble pour aider à résoudre le problème de 10.5.x, 10.6.x 10.7.x les clients, quelle que soit la question est.

Ce qui arrive à ma question(s):

  • Quel est le Illegal Instruction: 4 d'erreur?
  • Pourquoi est - -mmacosx-version-min=10.x corriger cette erreur spécifique sur 10.x et plus de clients?

J'aimerais appliquer ce correctif à mon makefile, mais je voudrais savoir ce qu'il fait avant de me tirer sur la gâchette. (Vais-je avoir de plus grandes binaires? Dois-je quand même 64 bits binaires? Sont-il des problèmes avec cette approche que je devrais connaître? Des effets secondaires indésirables? Etc.)

44voto

Alex Reynolds Points 45039

À partir de l' Apple Developer Forum (requis):

"Le compilateur et l'éditeur de liens sont capables d'utiliser des fonctionnalités et de l'exécution des optimisations qui ne fonctionne pas sur les anciennes versions de systèmes d'exploitation. -mmacosx-version-min raconte l'outils de quelle version de système d'exploitation que vous avez à travailler avec, de sorte que les outils peuvent désactiver les optimisations qui ne fonctionne pas sur les versions de système d'exploitation. Si vous avez besoin pour fonctionner sur d'anciennes versions de système d'exploitation, alors vous devez utiliser ce drapeau.

"L'inconvénient de l' -mmacosx-version-min , c'est que les performances de l'application peut être pire sur les nouvelles versions du système d'exploitation alors qu'il aurait pu être s'il n'a pas besoin d'être rétro-compatible. Dans la plupart des cas, les différences sont minimes."

25voto

foundry Points 15423

Le "illegal instruction" message est simplement pour vous dire que votre binaires contiennent des instructions de la version de l'OS que vous essayez d'exécuter en vertu de ne pas comprendre. Je ne peux pas vous donner le sens exact de l' 4 mais je pense que cela est interne à Apple.

Sinon, jetez un oeil à ces... ils sont un peu vieux, mais certainement vous dire ce que vous devez savoir

Comment 64 bits de code de travail sur OS X 10.5?
qu'est-macosx-version-min implique?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X