1. ホーム
  2. macos

[解決済み】「Illegal Instruction: 4」エラーと、「-mmacosx-version-min=10.x」で解決するのはなぜですか?

2022-02-01 19:49:50

質問内容

私は Illegal Instruction: 4 Mac OS X 10.8.2 ("Mountain Lion") で GCC 4.7.2 を使ってコンパイルしたバイナリを Mac OS X 10.7.x ("Lion") およびそれ以前のバージョンで実行するとエラーが発生します。Mac OS X 10.8.xでは正常に動作します。

を追加しました。 -mmacosx-version-min=10.5 をコンパイルフラグに追加することで、10.5.x, 10.6.x, 10.7.x のクライアントで、その問題が何であれ、解決できるようになったようです。

そこで質問です。

  • とは何ですか? Illegal Instruction: 4 のエラーは?
  • なぜ -mmacosx-version-min=10.x は、この特定のエラーを修正します。 10.x 以上のクライアントは?

この修正を私のmakefileに適用したいのですが、引き金を引く前に、この修正が何をするものなのか知りたいです。(バイナリが大きくなるのでしょうか? 64ビットバイナリはまだありますか?このアプローチで私が知っておくべきゴチャゴチャはありますか?意図しない副作用は?などなど)

解決方法は?

からの アップルデベロッパーフォーラム (アカウントが必要です)。

<ブロッククオート

コンパイラとリンカは、古いバージョンのOSでは動作しない機能を使用したり、最適化を実行したりすることができます。 -mmacosx-version-min は、どのOSバージョンで動作させる必要があるかをツールに伝えることで、ツールはそのOSバージョンで動作しない最適化を無効化することができます。もし、古いOSバージョンで動作させる必要がある場合は、このフラグを使用しなければなりません。

の欠点は -mmacosx-version-min は、後方互換性を必要としない場合、新しい OS バージョンでアプリのパフォーマンスが低下する可能性があることです。ほとんどの場合、その差はわずかです。