これはIS19erのAdvent Calenderのために書かれた記事です。
こんにちは、友人のPCがC言語のheaderファイルをincludeできなくなったため、直したことについて書きます。環境構築に関しては本当に無知なので、ここで少しでも理解を深められたらと思います。
PCの状況
友人から与えられた情報は、
1、OSをアップデートして、Xcodeを入れたらCとC++とPythonが使えなくなった
2、OSをアップデートする前は、CもC++も動いていたが、warningがよく出ていた
3、先生にxcodeをいれるように勧められ、XcodeをいれるためにOSのアップデートを行った
だそうです。
治した経緯
とりあえず、順番に見ていきました。
とりあえず、適当にpythonのfileを作る。動かしてみると、動いた…動かすコードが間違えていたのかな?jupyternotebookも動いているし、動くじゃないか!!
CもC++も動くんだろう…
そう思って、適当なコードを打った。
#include <iostream>
int main(){
cout << “a” << endl;
}
このコードを実行してみると、
In file included from /usr/local/Cellar/gcc@5/5.5.0_2/include/c++/5.5.0/bits/postypes.h:40:0,
from /usr/local/Cellar/gcc@5/5.5.0_2/include/c++/5.5.0/iosfwd:40,
from /usr/local/Cellar/gcc@5/5.5.0_2/include/c++/5.5.0/ios:38,
from /usr/local/Cellar/gcc@5/5.5.0_2/include/c++/5.5.0/ostream:38,
from /usr/local/Cellar/gcc@5/5.5.0_2/include/c++/5.5.0/iostream:39,
from hoge.cc:1:
/usr/local/Cellar/gcc@5/5.5.0_2/include/c++/5.5.0/cwchar:44:19: fatal error: wchar.h: No such file or directory
compilation terminated.
???
よくわからないコードが出ているが、どうやらwchar.hというファイルがincludeできないらしい…
C言語で試してみると、
hoge.c:1:19: fatal error: stdio.h: No such file or directory
compilation terminated.
という風になった。
この二つから見るに、headerファイルがincludeできなくなっている模様。
これを治すには、どうすればいいのか…
まず、error codeで検索してみた。
記事0に出会う。
xcode-select–installを行えばうまく行くようだ。
やってみる。できない。
xcode-select: error: command line tools are already installed, use "Software Update" to install updates
と言われた。これは環境構築あるあるだと思うのですが、思ったよりうまくいかない。
そもそもインストールされているみたいだった。
この記事を読んでいる中で、そもそもOSの種類が違うことに気づいた。
そういえば、Xcodeをいれる前にOSをアップデートしたと言っていたので、そこに穴があるのではないかと考え、OSアップデートでうまくいかない問題を調べることにした。
記事1に出会う。
この記事は、Mojaveへとアップデートした後に、環境を構築し直した人の記事である。そこの記事によると、
brew upgradeで解決すると書いていた。brew upgrade はソフトウェアのupdateをする作業なのでしても大丈夫そう。なぜ解決するのかわからないがとりあえず行う。
解決するはずだったのだが、解決しなかった。同じエラーコードを吐き続ける。
そこで、記事2を見つけた。
macOS_SDK_headers_for_macOS_10.14.pkg というpkgファイルがPCの中に存在したので、これをインストールしてみる。
治った。。。
なぜ治ったのか全くわからないが、結果オーライ。
結構、時間がかかってしまった。環境構築は難しい。
考察
経緯を書くだけでは全く無益な記事になってしまうので、少しだけ有益(かもしれない)情報を。
そもそも、stdio.hなどのincludeファイルは/usr/includeという場所にある。そこが今回はなくなっていたために、エラーが出ていた。消えることがたまにあるらしい。
Xcode 10について、ヘッダーは、macOS SDKという場所にインストールされる。コンパイルされたソフトウェアは、macOS SDKからヘッダーを探す。これはデフォルトで行われる操作らしい。
ちなみに、友人のPCの場合、macOS SDKは
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs に存在した。
一部のソフトウェアでは適切にSDKがbuildされず、macOS headers が/usr/include 以下にインストールされている必要があることがあるそうだ。
/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgはそれをしてくれるpackagesだそうだ。そのおかげで今回は助かったようだ。
このAppleのサイトを見れば詳しいことは載っている。
Appleの公式サイトを見ることも大事だと感じた。
このリンクが一番役立ちそう。
今回の件の難しいところは、OS updateで起きたのか、Xcodeのインストールで起きたのかがわからないところだった。初めから、Xcodeのインストールの時に起きたのだと気付けていれば、Appleのサイトに早く行きつけたかもしれない。気づくためには、OSのupdateで何がされているのか、Xcodeの果たす役割などを、きちんと知っておく必要があると感じた。
まとめ
環境構築は難しい。一回一回場当たり的に慣れていくしかないと感じている。ただ、同時にコンピューターの内部についての知識不足も感じる。学科の勉強でその辺りも埋めて行きたい。
明日は、はっしーさんの記事です。楽しみですね!
12/20/2018