いつもの如く、CentOS7を使ってサーバを構築していて、Redis6系をビルドしようとしていた。ソースをダウンロードしてきて、makeを実行するだけでビルドされるはずだったのだが、server.cのコンパイルでがーっとエラーが出てビルドがエラーで終了した。

ただ、server.cのエラーの出方を眺めてみても、何が起きているのかよく分からず…。

うーむ。redis6系からは何かが変わったのかなぁと思って、実際にビルドが始まる前のconfigure時のログを眺めていたら、以下のようなエラーが出ていた。

configure: No compiler with C++14 support was found

まぁ、端的にはC++14相当の機能をサポートしたコンパイラがないぞってことらしい。ちょっと調べてみると、CentOS7でデフォルトになっているgcc 4.8.5ではオプションを付ければC++14の機能が有効になるらしいことまではわかったけど、Redisのバージョンを上げる際に再ビルドする際にオプションを付け忘れそうなので、、、C++14の機能がデフォルトでOnになっているgcc 6.1以降を使ってみることにした。

というわけで、調べてみると以下のようなコマンドを叩けば、新しいgccがインストールされるとのことだった。

sudo yum install -y centos-release-scl
sudo yum-config-manager --enable rhel-ser
sudo yum install devtoolset-7

その上で、以下のコマンドを叩けば、新しいgccが使えるようになると。

scl enable devtoolset-7 bash

手元のCentOSで利用可能になったのはgcc 7.3.1だった。

ただ、このままだと、新しいgccを使いたい時には上記のsclコマンドを叩く必要があるようなので、もう常時、gcc7でいいやと思った場合は.bash_profileに以下のように追記すればよさげとのこと。

source /opt/rh/devtoolset-7/enable

ログインする度にsourceされるので、常にgcc7が使えるようになっていた。んで、gcc 7.3.1はC++14の機能がデフォルトで有効なので、redisのビルドにも無事成功した。redis5系だと、古いgccでもビルドできていたはずなので、やっぱりredis6系からC++14の機能が必須になるような書き換えが行われたんだろうなぁと思うけれど、リリースノートを斜め読みしただけではよく分からず…(遠い目)

参考:
CentOS 7にgcc 7をインストール(SCL)CentOS 7にgcc 7をインストール(SCL)