Edited at

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くらいになりましたので...