之所以是不完全教程,是因为Linux系统版本不尽相同,方法也不一样,但是大方向是对的。
离线
2022-11-25 00:23:18 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840] -> "./gmp-6.1.0.tar.bz2" [1]
2022-11-25 00:24:17 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
2022-11-25 00:24:59 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925] -> "./mpc-1.0.3.tar.gz" [1]
2022-11-25 00:26:46 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 [1658291] -> "./isl-0.18.tar.bz2" [1]
先建个目录build 和文件安装目录
mkdir build
mkdir /usr/local/gcc-8.2.0
然后进去目录:cd build
编译指令输入:
../configure --prefix=/usr/local/gcc-8.2.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib
如果报错:
configure: error: no acceptable C compiler found in $PATH
查看得知未安装合适的编译器。
sudo yum install gcc-c++
(使用sudo yum install gcc-c++时会自动安装/升级gcc及其他依赖的包。)
重新执行
../configure --prefix=/usr/local/gcc-8.2.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib
顺便说一下,make的-j参数是个坑,虽然可以并行编译,但如果Makefile或依赖关系有问题,编译会出错,4是CPU核心的的倍数,单核-j2 ,2核心用-j4,以此类推,可以加速编译速度,也可以不带,只使用一个编译器,编译过程有点漫长。
然后是漫长的编译等待时间。。。。。。电脑配置低可能需要2个小时。
yum -y remove gcc g++
ln -s /usr/local/gcc-8.2.0 /usr/bin/gcc
最后一行输出 gcc version 8.2.0 (GCC)
还可以输入:strings /usr/lib64/libstdc++.so.6 | grep 'CXXABI' 查看最新的版本库文件
命令:../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
这里要说一下 上面的 --prefix=/usr 一定不能改,只能是 --prefix=/usr,否则安装不成功,后面坑一堆
大概率报错:
提示make版本太老:需要更新到make4.2,跳转到《四、make4.2安装》
提示bison版本太老:需要更新到bison3.0.4,跳转到《五、bison3.0.4安装》
提示python版本太老:需要更新到python3.8,跳转到《六、python3.8安装》
再次执行
提示compiler编译器版本太低:需要升级gcc-11.2.0,跳转到《七、Linux升级gcc到最新版本gcc-11.2.0》
make -j4
make install
ll /lib64/libc*
可以看到 /lib64/libc.so.6 -> libc-2.29.so就表示成功了,
然后可以继续查看 glibc支持的版本
strings /lib64/libc.so.6 | grep GLIBC
问题一:安装时报错ModuleNotFoundError: No module named '_ctypes'的解决办法
执行如下命令:yum install libffi-devel
问题二:安装时报错zipimport.ZipImportError: can't decompress data; zlib not available
从错误信息分析,就是缺少了zlib的解压缩类库,安装即可
执行如下命令:yum -y install zlib*
执行完,这里需要编译,会生成build.sh文件,然后执行这个文件 sh build.sh
make -v
bison --version
bison -V
貌似就没有安装bison 。
yum install bison
查看版本:
Centos8可能会有如下错误。只需要根据提示找到目录下的glob.c文件增加
# define __alloca alloca
建立安装的目录
mkdir /usr/local/python3
进入解压文件
cd Python-3.8.0a1
建立编译文件夹
mkdir build
cd build
../configure --prefix=/usr/local/python3
接着编译一下:
make -j4
最后就是安装了:
make install
这里会到处yum不可用,先查看系统python的版本
python -V
我现在是python2.7的版本
然后修改
vim /usr/bin/yum
!/usr/bin/python 改为 #!/usr/bin/python2.7
然后进入
cd /usr/bin
删除原来的python软连接
rm -rf python
建立python3.8的链接
ln -s /usr/local/python3/bin/python3 /usr/bin/python
以下部分配置后异常,系统命令全都不能用。先放一放不去执行
然后修改配置
vim ~/.bash_profile
加入
export PATH=$PATH:$HOME/bin:
export PATH=$PATH:$HOME/bin:/usr/local/python3/bin
执行
source ~/.bash_profile
python -V
wget http://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.gz
# 腾讯软件源 https://mirrors.cloud.tencent.com/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.gz
tar -zxvf gcc-11.2.0.tar.gz
yum -y install bzip2 #已安装可以跳过这一步
# 中标麒麟系统需要以下依赖
# yum -y install gmp mpfr mpc isl bzip2
cd gcc-11.2.0
./contrib/download_prerequisites
mkdir build
cd build/
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
#–enable-languages表示你要让你的gcc支持那些语言,
#–disable-multilib不生成编译为其他平台可执行代码的交叉编译器。
#–disable-checking生成的编译器在编译过程中不做额外检查,
#也可以使用*–enable-checking=xxx*来增加一些检查
make
#这一步需要时间非常久 可以使用 make -j4 让make最多运行四个编译命令同时运行,加快编译速度(建议不要超过CPU核心数量的2倍)
make install
gcc -v
Using built-in specs.
COLLECT_GCC=/usr/local/bin/gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/11.2.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 11.2.0 (GCC)
验证:gcc -v;或者g++ -v,如果显示的gcc版本仍是以前的版本,就需要重启系统;
或者可以查看gcc的安装位置:which gcc;
然后在查看版本 /usr/local/bin/gcc -v
确定以及配置成功后可以将原先的版本删除
yum -y remove gcc g++
ln -s /usr/local/bin/gcc /usr/bin/gcc
ln -s /usr/local/bin/g++ /usr/bin/g++
#查看当前的动态库
strings /usr/lib64/libstdc++.so.6 | grep CXXABI
rm -f /usr/lib64/libstdc++.so.6
ln -s /usr/local/lib64/libstdc++.so.6.0.29 /usr/lib64/libstdc++.so.6
#查看更新后的动态库
strings /usr/lib64/libstdc++.so.6 | grep CXXABI
# 安装后的动态库会位于/usr/local/lib64目录下,
#其他版本在该目录下寻找对应的动态库libstdc++.so.6.X.XX