一、安装开发必备环境
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 项。
<2021-01-19更新>
要是没有找到更新版本的 libstdc++.so.6
(1)可以安装一个高版本的 Anaconda,在其 /lib 目录下找到libstdc++.so.6 文件。
(2)但一般是通过升级 GCC 来实现 libstdc++ 的升级的,若是安装新版本的 GCC 发现 libstdc++ 没有变,就大概率是环境里没有导入升级后新版本的 libstdc++.so 文件,找到它,再按照上面的方法进行软链接重指向即可。
四、编译安装GDB
gdb调试中出现:Missing separate debuginfos, use: debuginfo-install glibc-2.17-106.e17_2.6.x86_4 libgcc-4.8.5-4.e17.x86_64的问题。
这时因为 GCC 版本与 GDB 版本不匹配导致的,或者说是 GDB 版本太低,GDB 也需要升级。(这里以 GDB 7.11.1 为例)
1 2 3 4 5 6 |
wget https://ftp.gnu.org/gnu/gdb/gdb-7.11.1.tar.gz tar -xvf gdb-7.11.1.tar.gz cd gdb-7.11.1 ./configure make make install |
整个编译过程不会很久,若在 make install 中出现 WARNING: ‘makeinfo’ is missing on your system,则安装相关依赖程序
1 |
sudo yum install texinfo libncurses5-dev |
安装完依赖后重新执行 make install 即可,安装完毕后重新启动系统。
通过
1 |
gdb -v |
来查看 GDB 版本。