Tools: Ubuntu 编译安装gcc杂记

Ubuntu 14.04使用的gcc版本是4.8,4.8似乎不支持C++14及更新的特性,于是手动编译安装了一下目前最新的gcc-8.2。网上教程很多,但是还有有一些坑稍微记录下。

1. Download

去官网下载并解压 https://gcc.gnu.org/

2. Compile & Install

  1. 进入解压好的目录 PATH/gcc-8.2.0/
  2. 检查依赖包
    ./contrib/download_prerequisites
    这个过程会比较久,因为要下载很多包,而且有可能等半天下载失败。那就只能手动下载了。打开download_prerequisites文件,看到里面有个base_url='ftp://gcc.gnu.org/pub/gcc/infrastructure/',去这个链接把这些包都下下到PATH/gcc-8.2.0/就可以了。手动下载完后再运行一遍 ./contrib/download_prerequisites 确保没有遗漏。
  3. 配置并编译
    mkdir build
    cd build
    ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
    配置参数参考 https://gcc.gnu.org/install/configure.html
    make -j32
  4. 安装
    sudo make install

3. Tips

安装完成,检查gcc版本 gcc --version,发现还是 4.8 ??没关系重启一下就好了。
如果重启完,还是4.8。 那么查看下当前 gcc 的路径。
which gcc
一般是可能是/usr/bincd到这个目录下查看下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

暂时只遇到这些坑,如果还有再补上。

猜你喜欢

转载自www.cnblogs.com/meow1234/p/ubuntu_gcc_compile.html