一、安装开发必备环境
1 2 3 |
sudo yum groupinstall "Development Tools" sudo yum install glibc-static libstdc++-static |
二、编译安装gcc
GCC下载地址:https://ftp.gnu.org/gnu/gcc/
下载后进行编译安装:(这里以 GCC 6.3.0 版本作为例子)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 下载GCC源代码 wget https://ftp.gnu.org/gnu/gcc/gcc-6.3.0/gcc-6.3.0.tar.bz2 # 解压压缩文件 sudo tar -xvf gcc-6.3.0.tar.bz2 (或者若是tar.gz文件则 sudo tar -zxvf gcc-6.3.0.tar.gz) # 进入文件目录 cd gcc-6.3.0 # 下载依赖包 ./contrib/download_prerequisits # 创建目录,目录名称自由,用于GCC build mkdir build # 进入目录中 cd build # 设置编译环境 disable-multilib 是64位编译标记 ../configure --enable-checking=release --enable-language=c,c++ --disable-multilib # 运行编译(建议不要用 make -j 进行多核编译,虽然速度会很快,但是很可能会导致编译失败) make # 等待完成编译后,进行安装 make install |
其中执行 ./contrib/download_prerequisits 将自动下载四个文件(下载地址为ftp://gcc.gnu.org/pub/gcc/infrastructure/下述文件名字)
- mpft-2.4.2.tar.bz2
- gmp-4.3.2.tar.bz2
- mpc-0.8.1.tar.gz
- isl-0.15.tar.bz2
若是网络环境不理想,下载速度缓慢,那么就需要删除已下载文件,重新下载;或者通过命令行窗口处,拿到下载地址(地址如上,若有变化就按新地址为准)手动下载,再放到源代码目录下。
下载完成后,configure需要配置一些选项,–prefix 可以设置 make 完后 make install 实际 GCC 安装的地址,若没有设置,就默认安装在 /usr/local/gcc-6.3.0 目录下。
编译需要的时间非常的长,需要耐心等待。(或许还是要用一下 make -j8)
编译完成后重新启动系统。(sudo init 6 / sudo reboot)
重新启动完成后,通过 gcc -v 查看 GCC 版本,可以用小程序测试一下。
需要载入的时候,可以在个人目录下的 .bashrc 中添加 /usr/local/gcc-x.x.x/bin lib64 路径,并 source .bashrc 刷新,然后用 gcc -v 查看。在 bin 目录下,还有 g++ 等可执行文件。
三、运行GCC程序出现‘GLIBCXX_3.4.21’ not fount问题
运行出现“./a.out: /usr/lib64/libstdc++.so.6:version ‘GLIBCXX_3.4.21’ not found(required by ./a.out) ”问题。
这是因为升级 GCC 时,生成的动态库没有替换老版本 GCC 动态库导致的问题,将 GCC 最新版本的动态库替换系统中老版本的动态库就可以解决了。
1 2 |
# 根据问题提示的路径,验证是否有 GLCBCXX_3.4.21 strings /usr/lib64/libstdc++.so.6 | grep GLIBC |
在输出结果中没有发现问题所提示的‘GLIBCXX_3.4.21’项,所以出现问题了。解决要将当前文件链接的指向改成最新的动态库地址:
1 2 3 4 5 6 7 8 9 10 11 |
### 重新建立软链接指向 # 找到文件路径 sudo find / -name "libstdc++.so" # 把libstdc++.so复制到/usr/lib64目录中 sudo cp /usr/local/lib64/libstdc++.so.6.0.21 /usr/lib64 # 进入目录 cd /usr/lib64 # 删除原来的软链接文件(最好先用ls -la确认一下是否真的是软链接文件) sudo rm -rf libstdc++.so.6 # 重新建立软链接 ln -s libstdc++.so.6.0.21 libstdc++.so.6 |
然后再用上面的指令查看,这时就能看到有 GLIBCXX_3.4.21 项。