つい先日、macOS Mojave にアップデートしました。High Sierra が散々な出来だったので人柱とかそんなのお構いなしに速攻アップデートです。
その後、gcc
を実行した所 stdio.h: No such a file or directory
となりハマったのでまとめます。
追記(2020/12/8):
macOS を Big Sur にアプデしました。以下の方法は最新の OS では使えないので、本記事の末尾に別のやり方を追記します。
やってしまったこと
macOS アプデ後に Xcode もアプデ。そのアプデ最中に気が早まって xcode-select --install
を実行してしまった。(以下に述べるようにこのことは関係がない?)
以下、ググって出た対処法と状況です。
(失敗)再度 xcode-select する
中途半端にコマンドライン SDK がインストールされているのか?と思い以下を実行してみました。
$ sudo rm -rf /Library/Developer/CommandLineTools # 一回消しちゃえ
$ xcode-select --install # もういっちょ
再起動しても状況は変わらず。
(失敗) /usr/include にリンクを張り直す
とりあえずやってみた所、SIP に弾かれて失敗です。不用意にこういうことしないほうが良いですね。
$ sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/ /usr/include
(成功) ヘッダインストール用の pkg を実行
stdio.h file not found error on macOS Sierra · Issue #338 · frida/frida によると macOS_SDK_headers_for_macOS という名のパッケージを実行すればいいという。それにスレッドには
The root reason is missing the /usr/include folder, install command-line tools sometimes will not automatically add it.
という記述が見つかります。運が悪かったのか?それとも日頃の行いが悪いのか?謎は深まるばかりですがとりあえず実行してみます。
$ open /Library/Developer/CommandLineTools/Packages
このディレクトリの中に...ありました!
実行した所、見事 stdio.h
が見つかったのでした。
追記:最新 OS での対処法
こちらの Qiita の記事にありました。ありがとうございます。
以下の行を .zshenv
や .bash_profile
に記述することで解決です。
$ export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"
書き込んだあとはシェルを再起動してください。
以上、とりあえずまとめておきました。
コメント
おお。
最近Ruby gem でネイティブなライブラリがコンパイルされない、そもそもRubyがインストールできない。ccちゃんとパス通ってるのに??という状況になりまして、ググったけど解決策が見つからず、
ここの情報で解決できました。めちゃくちゃ助かりました。
ありがとうございました。