Raspberry Pi `GLIBCXX_3.4.21' not foundでつまづいた

#環境
Raspberry Pi
OS:jessie (8)

#エラー内容
nodeを使ってとあるプログラムをうごかそうとしたら下記のようなエラーがでてきてかなり詰まったのでメモ

```
Error: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required 
```
#調査
この辺を参考にしてみた
https://qiita.com/locatw/items/9ada8cd9048819ad401f

```
$sudo find / -name libstdc++.so
/usr/lib/gcc/arm-linux-gnueabihf/4.9/libstdc++.so
```

たしかに`GLIBCXX_3.4.21`はいない

```
$strings /usr/lib/gcc/arm-linux-gnueabihf/4.9/libstdc++.so | grep GLIBC

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBC_2.4
GLIBC_2.18
GLIBC_2.17
GLIBCXX_DEBUG_MESSAGE_LENGTH
```


# OSのアップデートをした 
https://raspberrypi.stackexchange.com/questions/72177/libstdc-error-glibcxx-3-4-22-not-found?noredirect=1
ここをみてたらOSアップデートしたらいいと書いてあったので
8->9.4にアップデートした

```
$lsb_release -a

No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 9.4 (n/a)
Release:	9.4
Codename:	n/a
```

で再び

```
$strings /usr/lib/gcc/arm-linux-gnueabihf/4.9/libstdc++.so | grep GLIBC

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBC_2.4
GLIBC_2.18
GLIBC_2.17
GLIBCXX_DEBUG_MESSAGE_LENGTH
```
いないじゃないか

`gcc/g++ 6.3.`と書いてあったので
`/usr/lib/gcc/arm-linux-gnueabihf/6.3`みたいなのができたのかなとおもってさがしてみたもののいない・・・・

探してみた結果下記のようだった

```
…eabihf/4.6.4/  …eabihf/4.7.3/  …eabihf/4.8.4/  …eabihf/4.9.2/
…eabihf/4.6/    …eabihf/4.7/    …eabihf/4.8/    …eabihf/4.9/
```

#gcc6をいれる
一応現在のgccのバージョンを確認

```
$gcc -dumpversion
4.9.2
```
ココを参考にいれてみた
http://suka4.blogspot.com/2016/12/raspberry-pi-3-gcc6.html

gccあたりのシンボリックリンクがどうなっているのか確認してみた

gccはどうやら`gcc-4.9*`のシンボリックリンクぽい

```
$ cd /usr/bin
$ ls -la

lrwxrwxrwx  1 root root          7  3月  8  2015 gcc -> gcc-4.9*
-rwxr-xr-x  1 root root     616948  3月 10  2015 gcc-4.8*
-rwxr-xr-x  1 root root     666352  2月 19  2018 gcc-4.9*
lrwxrwxrwx  1 root root         10  3月  8  2015 gcc-ar -> gcc-ar-4.9*
-rwxr-xr-x  1 root root      24312  3月 10  2015 gcc-ar-4.8*
-rwxr-xr-x  1 root root      24324  2月 19  2018 gcc-ar-4.9*
lrwxrwxrwx  1 root root         10  3月  8  2015 gcc-nm -> gcc-nm-4.9*
-rwxr-xr-x  1 root root      24264  3月 10  2015 gcc-nm-4.8*
-rwxr-xr-x  1 root root      24276  2月 19  2018 gcc-nm-4.9*
lrwxrwxrwx  1 root root         14  3月  8  2015 gcc-ranlib -> gcc-ranlib-4.9*
-rwxr-xr-x  1 root root      24268  3月 10  2015 gcc-ranlib-4.8*
-rwxr-xr-x  1 root root      24280  2月 19  2018 gcc-ranlib-4.9*
```

```
$ sudo apt-get update
$ sudo apt-get install gcc-6 g++-6
```

ターミナルで実行してるのに初めてこんなグラフィカルなやつが出ることを知りちょっとびびった
![スクリーンショット 2018-09-23 21.33.24.png](https://qiita-image-store.s3.amazonaws.com/0/176479/a913ce18-c145-a083-4be0-ed2f397abe53.png)

```
NSSを使用している実行中のサービスやプログラムを再起動する必要があります。そうしないと、検索や認証ができなくなる可能性があります
（sshなどのサービスの場合はログインに影響する可能性があります）。
サービスが││再開されるように、スペースで区切られたinit.dスクリプトのリストを見直し、必要に応じて修正してください。 
││││注意：sshd / telnetdを再起動しても、既存の接続には影響しないはずです
││││サービスを再起動してGNU libcライブラリをアップグレードする：
```
よくわからないがとりあえずOK

# gcc6がはいったのか一応確認

`gcc-6`を確認できた

```
$ cd /usr/bin
$ ls -la

lrwxrwxrwx  1 root root          7  3月  8  2015 gcc -> gcc-4.9*
-rwxr-xr-x  1 root root     616948  3月 10  2015 gcc-4.8*
-rwxr-xr-x  1 root root     666352  2月 19  2018 gcc-4.9*
lrwxrwxrwx  1 root root         25  3月  1  2018 gcc-6 -> arm-linux-gnueabihf-gcc-6*
lrwxrwxrwx  1 root root         10  3月  8  2015 gcc-ar -> gcc-ar-4.9*
-rwxr-xr-x  1 root root      24312  3月 10  2015 gcc-ar-4.8*
-rwxr-xr-x  1 root root      24324  2月 19  2018 gcc-ar-4.9*
lrwxrwxrwx  1 root root         28  3月  1  2018 gcc-ar-6 -> arm-linux-gnueabihf-gcc-ar-6*
lrwxrwxrwx  1 root root         10  3月  8  2015 gcc-nm -> gcc-nm-4.9*
-rwxr-xr-x  1 root root      24264  3月 10  2015 gcc-nm-4.8*
-rwxr-xr-x  1 root root      24276  2月 19  2018 gcc-nm-4.9*
lrwxrwxrwx  1 root root         28  3月  1  2018 gcc-nm-6 -> arm-linux-gnueabihf-gcc-nm-6*
lrwxrwxrwx  1 root root         14  3月  8  2015 gcc-ranlib -> gcc-ranlib-4.9*
-rwxr-xr-x  1 root root      24268  3月 10  2015 gcc-ranlib-4.8*
-rwxr-xr-x  1 root root      24280  2月 19  2018 gcc-ranlib-4.9*
lrwxrwxrwx  1 root root         32  3月  1  2018 gcc-ranlib-6 -> arm-linux-gnueabihf-gcc-ranlib-6*
```

ようやく`GLIBCXX_3.4.21`の存在を確認できた

```
$ strings /usr/lib/gcc/arm-linux-gnueabihf/6.3.0/libstdc++.so | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBC_2.4
GLIBC_2.18
GLIBC_2.17
GLIBCXX_DEBUG_MESSAGE_LENGTH
```

#シンボリックリンクのはりかえをする
何がおきてるのかよくわからないので一応可視化

```
$ sudo rm gcc g++

$ ls -la
-rwxr-xr-x  1 root root     616948  3月 10  2015 gcc-4.8*
-rwxr-xr-x  1 root root     666352  2月 19  2018 gcc-4.9*
lrwxrwxrwx  1 root root         25  3月  1  2018 gcc-6 -> arm-linux-gnueabihf-gcc-6*
lrwxrwxrwx  1 root root         10  3月  8  2015 gcc-ar -> gcc-ar-4.9*
-rwxr-xr-x  1 root root      24312  3月 10  2015 gcc-ar-4.8*
-rwxr-xr-x  1 root root      24324  2月 19  2018 gcc-ar-4.9*
lrwxrwxrwx  1 root root         28  3月  1  2018 gcc-ar-6 -> arm-linux-gnueabihf-gcc-ar-6*
lrwxrwxrwx  1 root root         10  3月  8  2015 gcc-nm -> gcc-nm-4.9*
-rwxr-xr-x  1 root root      24264  3月 10  2015 gcc-nm-4.8*
-rwxr-xr-x  1 root root      24276  2月 19  2018 gcc-nm-4.9*
lrwxrwxrwx  1 root root         28  3月  1  2018 gcc-nm-6 -> arm-linux-gnueabihf-gcc-nm-6*
lrwxrwxrwx  1 root root         14  3月  8  2015 gcc-ranlib -> gcc-ranlib-4.9*
-rwxr-xr-x  1 root root      24268  3月 10  2015 gcc-ranlib-4.8*
-rwxr-xr-x  1 root root      24280  2月 19  2018 gcc-ranlib-4.9*
lrwxrwxrwx  1 root root         32  3月  1  2018 gcc-ranlib-6 -> arm-linux-gnueabihf-gcc-ranlib-6*
```

シンボリックリンク張替えて

```
$ sudo ln -s gcc-6 gcc

$ ls -la
lrwxrwxrwx  1 root root          5  9月 23 22:09 gcc -> gcc-6*
-rwxr-xr-x  1 root root     616948  3月 10  2015 gcc-4.8*
-rwxr-xr-x  1 root root     666352  2月 19  2018 gcc-4.9*
lrwxrwxrwx  1 root root         25  3月  1  2018 gcc-6 -> arm-linux-gnueabihf-gcc-6*
lrwxrwxrwx  1 root root         10  3月  8  2015 gcc-ar -> gcc-ar-4.9*
-rwxr-xr-x  1 root root      24312  3月 10  2015 gcc-ar-4.8*
-rwxr-xr-x  1 root root      24324  2月 19  2018 gcc-ar-4.9*
lrwxrwxrwx  1 root root         28  3月  1  2018 gcc-ar-6 -> arm-linux-gnueabihf-gcc-ar-6*
lrwxrwxrwx  1 root root         10  3月  8  2015 gcc-nm -> gcc-nm-4.9*
-rwxr-xr-x  1 root root      24264  3月 10  2015 gcc-nm-4.8*
-rwxr-xr-x  1 root root      24276  2月 19  2018 gcc-nm-4.9*
lrwxrwxrwx  1 root root         28  3月  1  2018 gcc-nm-6 -> arm-linux-gnueabihf-gcc-nm-6*
lrwxrwxrwx  1 root root         14  3月  8  2015 gcc-ranlib -> gcc-ranlib-4.9*
-rwxr-xr-x  1 root root      24268  3月 10  2015 gcc-ranlib-4.8*
-rwxr-xr-x  1 root root      24280  2月 19  2018 gcc-ranlib-4.9*
lrwxrwxrwx  1 root root         32  3月  1  2018 gcc-ranlib-6 -> arm-linux-gnueabihf-gcc-ranlib-6*
```

```
$ sudo ln -s g++-6 g++

$ ls -la
lrwxrwxrwx  1 root root          5  9月 23 22:09 gcc -> gcc-6*
-rwxr-xr-x  1 root root     616948  3月 10  2015 gcc-4.8*
-rwxr-xr-x  1 root root     666352  2月 19  2018 gcc-4.9*
lrwxrwxrwx  1 root root         25  3月  1  2018 gcc-6 -> arm-linux-gnueabihf-gcc-6*
lrwxrwxrwx  1 root root         10  3月  8  2015 gcc-ar -> gcc-ar-4.9*
-rwxr-xr-x  1 root root      24312  3月 10  2015 gcc-ar-4.8*
-rwxr-xr-x  1 root root      24324  2月 19  2018 gcc-ar-4.9*
lrwxrwxrwx  1 root root         28  3月  1  2018 gcc-ar-6 -> arm-linux-gnueabihf-gcc-ar-6*
lrwxrwxrwx  1 root root         10  3月  8  2015 gcc-nm -> gcc-nm-4.9*
-rwxr-xr-x  1 root root      24264  3月 10  2015 gcc-nm-4.8*
-rwxr-xr-x  1 root root      24276  2月 19  2018 gcc-nm-4.9*
lrwxrwxrwx  1 root root         28  3月  1  2018 gcc-nm-6 -> arm-linux-gnueabihf-gcc-nm-6*
lrwxrwxrwx  1 root root         14  3月  8  2015 gcc-ranlib -> gcc-ranlib-4.9*
-rwxr-xr-x  1 root root      24268  3月 10  2015 gcc-ranlib-4.8*
-rwxr-xr-x  1 root root      24280  2月 19  2018 gcc-ranlib-4.9*
lrwxrwxrwx  1 root root         32  3月  1  2018 gcc-ranlib-6 -> arm-linux-gnueabihf-gcc-ranlib-6*
```

#　再びバージョンを確認

```
$ gcc -dumpversion
6.3.0
```

変更完了した
長かった・・・・


#　参考文献
http://suka4.blogspot.com/2016/12/raspberry-pi-3-gcc6.html