osXをmojaveにしたらgccがビルドできなくなった時の対処法

昔はちゃんと動いたc++のコードが，OSをmojaveにしたら動かなくなった．

```
$ g++ -o a.out hello.cpp
```


出てきたエラー

```
In file included from /usr/local/include/c++/7.1.0/bits/postypes.h:40:0,
                 from /usr/local/include/c++/7.1.0/iosfwd:40,
                 from /usr/local/include/c++/7.1.0/ios:38,
                 from /usr/local/include/c++/7.1.0/ostream:38,
                 from /usr/local/include/c++/7.1.0/iostream:39,
                 from main.C:1:
/usr/local/include/c++/7.1.0/cwchar:44:10: fatal error: wchar.h: No such file or directory
 #include <wchar.h>
          ^~~~~~~~~
compilation terminated.
```

調べた対処法；gccを再インストールするのがいいらしい．

#gccを再インストールする
ということでhomebrewで再インストールを試みる


```
$ brew reinstall gcc
```

するとこんなエラーが

```
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/gfortran
Target /usr/local/bin/gfortran
already exists. You may want to remove it:
  rm '/usr/local/bin/gfortran'

To force the link and overwrite all conflicting files:
  brew link --overwrite gcc

To list all files that would be deleted:
  brew link --overwrite --dry-run gcc

Possible conflicting files are:
/usr/local/bin/gfortran
```

とりあえず言われた通り```/usr/local/bin/gfortran```を削除してみることに．

##gccを再インストールするために邪魔しているファイルを削除する．

```
$ rm /usr/local/bin/gfortran
```

こうするとこう聞かれる．

```
override rwxr-xr-x  root/wheel for /usr/local/bin/gfortran? 
```

ここでただreturnを押しても何も変わらない．

```
override rwxr-xr-x  root/wheel for /usr/local/bin/gfortran? y
```

最後にyをつけてreturnを押すとちゃんと削除される．

もう一度再インストールを試みる．

```
$ brew reinstall gcc
```

すると今度はこんなエラーが

```
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink include/c++/8.3.0
/usr/local/include/c++ is not writable.

You can try again using:
  brew link gcc
```

言われた通りやってみる

##gccを再インストールするためにリンクをつなぎ直す．

```
$ brew link gcc
```

そしたらこんなエラー

```
Error: Could not symlink include/c++/8.3.0
/usr/local/include/c++ is not writable.
```

これを解決するにはこれを書き換える権限は僕にあるんだぞおおおってことを言わなきゃいけない．

###gccを再インストールするためにリンクをつなぎ直すために管理者権限を変更する．
これを伝えるにはこう書けばいい．

```
$ sudo chown -R [ここにユーザー名]:admin /usr/local/include/c++
```
chownコマンドについてはこの記事参照
https://qiita.com/t-a-run/items/239ed690ece7a011804a

パスワードを求められるので入力．

再度リンクを試みる

```
$ brew link gcc
```

するとまたしてもエラー

```
Error: Could not symlink lib/gcc/8
/usr/local/lib/gcc is not writable.
```

おんなじように伝えてあげる

```
$ sudo chown -R [ここにユーザー名]:admin /usr/local/lib/gcc
```

僕はadminなんだぞおお！いうこと聞け！

三度目の正直

```
$ brew link gcc
```

上手く行った．

やっと本題に戻れる

```
$ brew reinstall gcc
```

今度は成功！

あとはこの記事に従ってエイリアスにシンボリックを貼っていけばできる！
https://qiita.com/wawawa/items/50c2c612b0937f28d92b

再インストールということだから，上記記事内のこの段階

```
$ ln -s /usr/local/bin/gcc-8 /usr/local/bin/gcc
```

この段階でもうすでにgccあるよ〜って怒られると思う．

```
ln: /usr/local/bin/gcc: File exists
```

そしたら先ほどと同じようにgccを消してやれば良い

```
$ rm gcc
```

こんな返事が返ってくるのでyをつけてreturn．

```
override rwxr-xr-x  root/wheel for gcc? y
```
g++についても同様．


開発環境整えるの...一番辛いですよね...
QiitaとつよつよエンジニアブログとStack overflow(とweblio翻訳)を行ったり来たりして今日も頑張りましょう！

関係ないですが英語の文章をchromeで読む時，chrome Extensionsのweblioポップアップ英和辞典おすすめです！
https://chrome.google.com/webstore/detail/weblio%E3%83%9D%E3%83%83%E3%83%97%E3%82%A2%E3%83%83%E3%83%97%E8%8B%B1%E5%92%8C%E8%BE%9E%E5%85%B8/oingodpdjohhkelnginmkagmkbplgema

英単語をダブルクリックするだけで和訳を表示してくれます！
これ入れてから英文読む時の精神的負荷が1/10くらいになりましたので...