在linux系统中使用Cmake,需要用到gcc编译器,但是centos7里的版本比较低。
而且在某些应用场景中,需要特定的gcc版本支持
但是轻易不要去编译gcc,以免出现更多不必要的问题。
推荐使用红帽提供的开发工具包( Developer Toolset )来管理gcc版本,这样做的好处是随时切换版本,并且可以并存多个版本,不会破坏原有gcc环境。
1 2 3 4 5 6 7 8
| Developer Toolset 对应gcc的版本 devtoolset-3对应gcc4.x.x版本 devtoolset-4对应gcc5.x.x版本 devtoolset-6对应gcc6.x.x版本 devtoolset-7对应gcc7.x.x版本 devtoolset-8对应gcc8.x.x版本 devtoolset-9对应gcc9.x.x版本 devtoolset-10对应gcc10.x.x版本
|
检查当前 GCC 版本: 首先,你可以通过以下命令检查当前系统中安装的 GCC 版本:
1 2 3 4 5 6 7 8
| [root@]# gcc --version Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper Target: x86_64-redhat-linux Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install--with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux Thread model: posix gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
|
一、问题原因
CentOS 7 的 SCL 软件源(centos-sclo-rh)已于 2024年6月30日停止维护,原官方镜像地址 mirrorlist.centos.org 无法解析或访问12。
二、解决方案
1. 备份并禁用原 SCL 源
cd /etc/yum.repos.d/
mv CentOS-SCLo-scl.repo CentOS-SCLo-scl.repo.bak
mv CentOS-SCLo-scl-rh.repo CentOS-SCLo-scl-rh.repo.bak
AI生成项目
说明:原 SCL 源已失效,需禁用以避免冲突。
2. 配置阿里云 SCL 源
手动创建或编辑配置文件:
vi CentOS-SCLo-rh.repo
添加以下内容:
1 2 3 4 5 6
| [centos-sclo-rh] name=CentOS-7 - SCLo rh baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
|
说明:将 baseurl 替换为阿里云镜像地址23。
3. 更新其他仓库地址
检查 /etc/yum.repos.d/ 目录下的其他仓库文件(如 CentOS-Base.repo),将 http://mirror.centos.org 替换为 https://mirrors.aliyun.com3。
4. 清理并重建 yum 缓存
1 2
| yum clean all yum makecache
|
5. 验证操作
执行 yum update 或安装所需软件(如 gcc),确认不再报错13。
安装 gcc 9
安装较新的 GCC 版本: 启用 SCL 仓库后,你可以安装较新的 GCC 版本。例如,安装 GCC 9:
1
| yum install devtoolset-9-gcc devtoolset-9-gcc-c++
|
注意:有可能安装其他版本会找不到对应的包
你可以根据需要选择其他版本的 GCC,例如 devtoolset-8 对应 GCC 8,devtoolset-10 对应 GCC 10,等等。
启用新版本的 GCC: 安装完成后,你需要启用新版本的 GCC。你可以通过以下命令启用:
1
| scl enable devtoolset-9 bash
|
这个命令会在当前 shell 会话中启用 GCC 9。如果你希望每次登录时自动启用新版本的 GCC,可以将以下命令添加到你的 ~/.bashrc
文件中:
1
| source /opt/rh/devtoolset-9/enable
|
版本验证
验证 GCC 版本: 最后,你可以再次检查 GCC 版本,确认升级是否成功:
1 2 3 4 5 6 7 8 9
| [root@]# gcc -v
Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/lto-wrapper Target: x86_64-redhat-linux Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-9/root/usr --mandir=/opt/rh/devtoolset-9/root/usr/share/man --infodir=/opt/rh/devtoolset-9/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --with-default-libstdcxx-abi=gcc4-compatible --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-9.3.1-20200408/obj-x86_64-redhat-linux/isl-install --disable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux Thread model: posix gcc version 9.3.1 20200408 (Red Hat 9.3.1-2) (GCC)
|
更新 libstdc++ 动态库
安装完成之后是还不能完全使用的,因为gcc动态库版本太老,还需要升级libstdc++.so.6才行。
1 2 3 4 5 6
| # 更新lib libstdc++.so.6.0.26 wget https://cdn.frostbelt.cn/software/libstdc%2B%2B.so.6.0.26 # 替换系统中的/usr/lib64 把下载的libstdc++.so.6.0.26 cp 到 /usr/lib64/ cd /usr/lib64/ ln -snf ./libstdc++.so.6.0.26 libstdc++.so.6
|
1、通过wget下载cmake版本
1
| wget https://cmake.org/files/v3.21/cmake-3.21.0.tar.gz
|
2、解压
1
| tar -zxvf cmake-3.21.0.tar.gz
|
3、进入cmake-3.21.0
1 2 3 4
| cd cmake-3.21.0
查看README.rst, 按照提示执行 ./bootstrap && make && sudo make install
|
报错问题:
1、提示bootstrap:行860: icc: 未找到命令,bootstrap:行860: tcc: 未找到命令
1 2 3 4
| sudo yum install gcc gcc-c++
export CC=/usr/bin/gcc export CXX=/usr/bin/g++
|
2、提示Could not find OpenSSL
1 2 3 4 5 6 7 8
| sudo yum install openssl openssl-devel
openssl version
openssl version -a | grep OPENSSLDIR
export OPENSSL_ROOT_DIR=/usr/lib64/openssl # 或者根据实际路径调整 export OPENSSL_LIBRARIES=/usr/lib64/openssl
|
3 、安装完成之后,执行cmake –version,提示-bash: /usr/bin/cmake: 没有那个文件或目录
1 2 3 4 5 6 7 8
| ls /usr/local/bin/cmake
echo $PATH
export PATH=/usr/local/bin:$PATH
source ~/.bashrc # 如果修改的是 ~/.bashrc source /etc/profile # 如果修改的是 /etc/profile
|