gccができなくなった友人のPCを直してみた

これは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

シェアする

  • このエントリーをはてなブックマークに追加

フォローする