SNSへはこちら

Macでgcc-10をビルドする(超絶裏技)

先の記事で「Ubuntu で gcc 10 動いたぜ」と言いました。
今回は Mac でビルドしたよ!という記事です。

そもそも

いつも Mac なのに何で今回だけ Ubuntu なのかというと、それは Mac ではビルドが出来ないから です。色々と調べたんですが、Mac では腹立たしい現実があってそれがビルドを邪魔しています。

出来ない理由

淡々と列挙しておきます。

/usr/include廃止

意味がわからん。これによって /usr/include をシステムヘッダのパスとしてハードコードしてあるものは全て使用不可です。gcc もその1つなのですが、ありがたいことにこのパスを別途指定する設定があります。

ちなみに代わりのパスはコマンドで取得可能です。

$ xcrun --sdk macosx --show-sdk-path
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk

この結果から、/Appなんとか/なんとか.sdk/usr/include` に該当の物があると分かります。

Xcode のバグ(?)

Xcode のバグなのか、OS のものなのかよくわかりませんが、stdlib.h にあるマクロの定義がされていない事態が発生しているらしく、このヘッダをインクルードしているソースファイルを gcc 内部の xgcc でビルドする時にエラーが出て止まります。確認している未定義マクロを示します。

  • __OSX_AVAILABLE_STARTING(...)
  • __OSX_AVAILABLE_BUT_DEPRECATED_MSG(...)

どう見ても Mac 特有のものっぽいですね。なんだかなあ。

configureコマンド

これでインストール出来るようになりました。

$ ../configure --prefix=/usr/local/gcc10 --disable-werror --disable-nls --disable-bootstrap --enable-languages=c,c++ --disable-multilib --with-sysroot=$(xcrun --sdk macosx --show-sdk-path) --with-native-system-header-dir=/usr/include --disable-libssp --program-suffix=-10

そして、マクロ未定義で怒られるので、不本意ですが当該 stdlib.h を編集します。ファイル上部に追加してください。

#define __OSX_AVAILABLE_STARTING(...)
#define __OSX_AVAILABLE_BUT_DEPRECATED_MSG(...)

これで出来るはずです。良かったよかった。

ビルドが終わったら、編集した stdlib.h をもとに戻すのをお忘れなく

コメント

  1. 匿名 より:

    いまはもうHomebrewで10.1.0が入りますね

    • shima-529 より:

      ありがとうございます。
      確かにHomebrewでVer.10になっていますね!これは嬉しいです...これで楽に使えますね!嬉しいです