Mac OSX 10.14 (mojave)でコンパイルした64bit版のプログラムが 10.6(snowleopard)で Illegal Instruction になる件

Mac OSX 10.15 Catalina になってから 32bit サポートが切られてしまい 64bit アプリの開発が必須になってしまったわけですが、なぜか OSX 10.14 (Mojave)でコンパイルしたプログラムを 最初の 64bit 完全対応の OSX である 10.6 (Snowleopard)で動作させようとすると Illegal Instruction になってしまう問題が発生して困りました

macos — 「Illegal Instruction:4」エラーとは何ですか。「-mmacosx-version-min = 10.x」で修正されるのはなぜですか?

調べてみると コンパイルオプションで解決できるとありました。

早速  -mmacosx-version-min=10.6 をつけてコンパイルしたところ、動くようになりました

調べてみたところ 10.14 でコンパイルした場合、バイナリ内に埋め込まれる最適化バージョン以外に

10.6 / 10.7 でバイナリサイズが最大
10.8 で ファイルサイズの変わる変更
10.9  - 10.13  でファイルサイズの変わらない範囲で変更
10.14 - 10.99 で数十バイト程度のヘッダデータの変更
ちなみに、何も指定しなかった場合は 10.14 を指定したのと同じバイナリができました。

10.15 を指定しても、 10.14で実行は可能です ・ω・

10.5 以下と 10.100以上は指定できません

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です