Johnman.md

プログラミングのことや個人的なことを書きます。たぶん。

macOSをMojaveにしたらC言語をコンパイルできなくなった

題名の通り。
仕事でも Mojave を使ってるし、そろそろ自宅の Mac Book も Mojave にしていいかと思って先日バージョンアップした。

何かが壊れるのは覚悟していたけど、結論からいうと Homebrew や gcc が動かなくなった。
※今判明しているのがこれらで、多分ほかにも(原因はなんにせよ)動かないものがあると思う。

ちなみに出てきたエラーはこんな感じ。

$ gcc --version
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

目次

Xcodeの再インストール

結論を書くと、アップグレードにより command line developer tools が使えなくなってるので再インストールすればいい。

$ xcode-select --install

これでとりあえず Homebrew なんかは動くようになる。
ついでに gcc-9 を gcc としてシンボリックリンクを貼り直す。

$ ls /usr/local/bin/ | grep gcc
gcc-4.9
gcc-9
gcc-ar-4.9
gcc-ar-9
...
$ ln -s /usr/local/bin/gcc-9 /usr/local/bin/gcc

これでとりあえず gcc も最低限動くようになった。

$ gcc --version
gcc (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

/usr/include/にヘッダファイルを追加

しかし、コンパイルしようとすると stdio.h がないと怒られる。

$ gcc hello.c
In file included from hello.c:1:
/usr/local/Cellar/gcc/8.3.0/lib/gcc/8/gcc/x86_64-apple-darwin17.7.0/8.3.0/include-fixed/stdio.h:78:10: fatal error: _stdio.h: No such file or directory

どうやら Xcode 10 からデフォルトではヘッダファイルを /usr/include/ に置いてくれなくなったらしい。
Missing /usr/include w/ Xcode 10 | Apple Developer Forums

これは以下のパッケージを開いてぽちぽちとインストールすれば解決できる。

$ open /Library/Developer/CommandLineTools/Packages

これで無事コンパイルできるようになった。