SNSへはこちら

XcodeやmacOSアプデ時にstdio.hが見つからないときの対処法まとめ

つい先日、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)"

書き込んだあとはシェルを再起動してください。

以上、とりあえずまとめておきました。

コメント

  1. 通りがかり より:

    おお。

    最近Ruby gem でネイティブなライブラリがコンパイルされない、そもそもRubyがインストールできない。ccちゃんとパス通ってるのに??という状況になりまして、ググったけど解決策が見つからず、
    ここの情報で解決できました。めちゃくちゃ助かりました。
    ありがとうございました。