先の記事で「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
をもとに戻すのをお忘れなく。
コメント
いまはもうHomebrewで10.1.0が入りますね
ありがとうございます。
確かにHomebrewでVer.10になっていますね!これは嬉しいです...これで楽に使えますね!嬉しいです