Ubuntu 14.04使用的gcc版本是4.8,4.8似乎不支持C++14及更新的特性,于是手动编译安装了一下目前最新的gcc-8.2。网上教程很多,但是还有有一些坑稍微记录下。
1. Download
去官网下载并解压 https://gcc.gnu.org/
2. Compile & Install
- 进入解压好的目录
PATH/gcc-8.2.0/
- 检查依赖包
./contrib/download_prerequisites
这个过程会比较久,因为要下载很多包,而且有可能等半天下载失败。那就只能手动下载了。打开download_prerequisites
文件,看到里面有个base_url='ftp://gcc.gnu.org/pub/gcc/infrastructure/'
,去这个链接把这些包都下下到PATH/gcc-8.2.0/
就可以了。手动下载完后再运行一遍./contrib/download_prerequisites
确保没有遗漏。 - 配置并编译
mkdir build
cd build
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
配置参数参考 https://gcc.gnu.org/install/configure.html
make -j32
- 安装
sudo make install
3. Tips
安装完成,检查gcc版本 gcc --version
,发现还是 4.8 ??没关系重启一下就好了。
如果重启完,还是4.8。 那么查看下当前 gcc
的路径。
which gcc
一般是可能是/usr/bin
。cd
到这个目录下查看下gcc
cd /usr/bin
ls -al | grep gcc
发现gcc
是个软链接,现在链接在4.8上
lrwxrwxrwx 1 root root 7 8月 31 2016 gcc -> gcc-4.8
那把它链接到新安装的gcc-8.2
就行了。新安装的gcc
可能在/usr/local/bin
接下来就可以顺利编译带有C++14特性的代码了。
但是坑还没完,编译完了运行,发现又报错了。
./main: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./main)
./main: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./main)
libstdc++版本好像太低了。。。那就去/usr/lib/x86_64-linux-gnu/
这个目录下看一下吧。
cd /usr/lib/x86_64-linux-gnu/
strings libstdc++.so.6 | grep GLIBCXX_
可以看到最高版本只到3.4.19
。当然更简单的直接ls -al | grep libstdc++
就可以看到这个libstdc++.so.6
的最后修改日期是很久之前。。。这不是我们编译gcc
时生成的那个。
同时ls -al
也可以看出,这个libstdc++.so.6
其实也是个软链接,现在链接的版本是老的版本。
lrwxrwxrwx 1 root root 19 2月 14 2018 libstdc++.so.6 -> libstdc++.so.6.0.19
那我们只有把它链接到刚刚编译gcc时生成的新版本就行了。gcc编译时生成的新版本一般在usr/local/lib64/libstdc++.so.6.0.25
。
如果没有的话,在/usr
目录下查找下sudo . find -name "libstdc++.so.6*"
PS: 软连接命令 sudo ln -s target link_name
, 创建软连接link_name
指向target
暂时只遇到这些坑,如果还有再补上。