从https://github.com/ninja-build/ninja/releases下载ninja,设置好PATH路径,执行ninja命令显示如下:
[root@test bin]# ./ninja -v
./ninja: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./ninja)
./ninja: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./ninja)
-----------------------------------------------------------------------------------------------------------------------------------------------
执行 strings 命令,发现确实没有`GLIBCXX_3.4.21'和`GLIBCXX_3.4.20'。
[root@test bin]# strings /lib64/libstdc++.so.6.0.19 | grep GLIBCXX
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_DEBUG_MESSAGE_LENGTH
-------------------------------------------------------------------------------------------------------------------------------------------------------------
解决方法:
1) 从https://ftp.gnu.org/gnu/gcc/选择一个新的版本的gcc,建议版本5以后的。我选择的是6.5.0。
2)编译gcc:
tar -zxvf gcc-6.5.0.tar.gz
cd gcc-6.5.0
mkdir build
cd ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
make
结果遇到了如下错误:C++ preprocessor "/lib/cpp" fails sanity check, 这是由于缺乏必要的c++库导致的,可以执行命令:yum install gcc-c++安装c++库,然后再执行make,就可以继续编译成功。如果想直接升级使用新版本的GCC,再执行make install。就可以了。如果不想使用新版本的gcc,可以继续一下几步,把 libstdc++.so替换为新的库即可。
3)查找 libstdc++.so.6.0.22文件,然后复制到/usr/lib64
4) cd /usr/lib64
5) unlink libstdc++.so.6 和 ln libstdc++.so.6.0.22 libstdc++.so.6
6) 再执行ninja --version 显示版本如下:
终于搞定。
如果有现成的 libstdc++的新的版本,就不需要这么费周折编译gcc了,直接复制到/usb/lib64,做一下第5)步就可以了。