首页 > 系统相关 >Centos7升级gcc

Centos7升级gcc

时间:2022-12-04 21:24:01浏览次数:83  
标签:升级 gcc -- GCC 11.1 Centos7 GDB 源码

不建议贸然升级,时间是比较久的并且容易出现一系列问题。

升级GCC版本到11.1

GCC11终于发正式版了, 4月底官方终于发了11.1正式版. 对于我们来说, 项目实际使用基于C++17的协程已经有段时间, stackless在没有compiler额外生成代码Buff的加持下, Stack变量的人肉处理, 花括号对代码的隔离, 还是会导致一些额外的工作量, 便利性上不那么完美. 既然GCC11.1已经发了, 我们之前的GCC8.3也在正常工作中, 升级成本比我们想象的低, 那新版到来, 又能解决项目的一些实际痛点, 升级的动力自然就比较足了.

下载GCC11.1源码

GCC的源码仓库地址为: https://github.com/gcc-mirror/gcc ,在浏览器打开这个网址后,不要急于下载,先选择gcc的版本,如下图所示:

image-20220518215012621

如上图所示找到GCC11.1,并点击 "releases/gcc-11.1.0"完成仓库的切换, 然后直接在网页上下载zip包, 自行上传至服务器后解压.

unzip gcc-releases-gcc-11.1.0.zip

也可以通过直接git clone的方式来拉取对应的gcc源码, 进入自己的home目录执行如下命令:

git clone --branch releases/gcc-11.1.0 https://github.com/gcc-mirror/gcc.git

两种方式效果一样, 获取到源代码后, 将当前目录切换到GCC源码根目录, 进入下一步. 源码目录如下图所示:

image-20220518215022746

安装依赖库

新的GCC源码内置了依赖库的获取脚本, GCC所依赖的mpfr, gmp, mpc, isl都可以使用内置脚本直接获取, 比老版本简单非常多, 在GCC目录下, 执行:

./contrib/download_prerequisites

此命名会自动下载GCC编译需要的几个依赖库.

配置和编译

前文也提到了, 我们需要同时保留老版本的GCC, 所以配置项里需要指定安装的目录, 配置命令如下 :

./configure --prefix=/usr/local/gcc-11.1.0 --enable-bootstrap --enable-languages=c,c++ --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib

我们仅会使用GCC做C与C++的编译, 所以此处语言也仅选择了这两者. 配置完成后, 我们进入编译安装阶段. 此处可以直接打开并行编译执行make命令, 比如笔者机器是2核的, 此处直接将并发数设置为4进行编译, 实测效果不错.

make -j4

记得一定要root权限, 不然可能会因为权限不足安装失败.

sudo -s
make install

这时整个gcc的安装过程已经成功执行完成, 按如下方法测试GCC是否正确安装:

/usr/local/gcc-11.1.0/bin/gcc --version

image-20220518215030007

得到上图的输出, 则GCC11.1已经成功安装.

CMake中的使用, ABI兼容问题

请参考 升级GCC到8.3 中的相关部分.

LD_LIBRARY_PATH的问题

如果代码没有全部切换到11.1, 那我们还需要额外的一步操作才能让gcc11.1编译出的程序正常的运行:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/gcc-11.1.0/lib64

可以直接将本行追加到~/.bashrc, 避免每次都单独写shell脚本追加该项. 注意更改~/.bashrc后记得重新连接终端, 让修改生效. 如果同时也添加了gcc-8.3.0, 注意gcc-11.1.0的export要在8.3.0之前, 否则还是会报LD相关的问题.

GDB的问题

GCC11.1开始, 要求使用支持C++11的编译器进行编译, 可能是由于这个改变, 生成的App可以正常运行, 但不能挂接GDB, 表现是用GDB启动生成的App就直接Crash, 报Segment Fault.

我们需要升级GDB到较新的版本, 就能解决该问题(具体出错的原因没有细查). 升级方法很简单:

到GNU官网下载比较新的GDB源码包并解压并编译安装, 笔者使用的shell是:

wget http://ftp.gnu.org/gnu/gdb/gdb-10.2.tar.gz
tar -zxf gdb-10.2.tar.gz
cd gdb-10.2
./configure
make -j4
sudo make install

默认安装的路径是/usr/local/bin, 并不会覆盖老的GDB(老的在/usr/bin/下), 所以使用VSCode或者自行运行的时候, 需要正确指定一下GDB的版本, 检查GDB的版本

小结

至此我们已经完成了GCC11.1的安装和相关环境的适配, 就笔者项目而言, 近期主要会用到的特性如下:

  1. C++20的coroutine
  2. concept(预计可以比较好的简化反射相关的代码)
  3. modules

参考文章:

  1. 升级GCC版本到11.1 - 云+社区 - 腾讯云

标签:升级,gcc,--,GCC,11.1,Centos7,GDB,源码
From: https://www.cnblogs.com/ncphoton/p/16950820.html

相关文章

  • oracle 10.2.0.1 64bit升级到10.2.0.4 64bit
    文档课题:oracle10.2.0.164bit升级到10.2.0.464bit.数据库:oracle10.2.0.164位系统:oel5.1164位1、前期准备1.1、关闭实例关闭需要升级的实例.SQL>shutdownimmediateD......
  • Centos7 内核升级(5.4.225)
    目录一、背景二、在线yum安装1)查看当前内核版本信息2)导入仓库源3)选择ML或LT版本安装4)设置启动5)生成grub配置文件6)重启7)验证是否升级成功8)删除旧内核(可选)三、离线rp......
  • Spring Boot3.0升级,踩坑之旅,附解决方案
    本文基于newbeemall项目升级SpringBoot3.0踩坑总结而来,附带更新说明:Spring-Boot-3.0-发布说明Spring-Boot-3.0.0-M5-发布说明一.编译报错,importjavax.servlet.*;......
  • centos7安装nginx
    下载解压官网地址:nginx:download下载稳定版中的,Linux版本解压缩tar-zxvfnginx-1.22.1.tar.gz安装依赖yuminstall-yopenssl*&yum-yinstalln......
  • 为 centos7 编译 nginx
    通过yum安装的nginx版本多数是1.22.x,已经被暴露出有一个高危的安全漏洞(CVE-2022-3638)。需要自行编译安装最新的1.23.2以修复这个安全问题。源码好下载,编译命令也简......
  • centos Postgresql11升级Postgresql14
    1.下载pgsql14的源码包进行安装yuminstallpostgresql14–yyuminstallpostgresql14-server-y附带安装yuminstallpostgresql14-libsyuminstallpostgresql14-c......
  • Centos7.9编译php 5.3 make时出现错误
    问题1:make:***[libphp5.la]Error1解决:yuminstalllibtool-ltdl-devel问题2:/bin/ld:ext/standard/dns.o:undefinedreferencetosymbol'__dn_sk......
  • centos7.9重启后,主机名会变为IP地址
    现象:centos7.9重启后,主机名会变为IP地址当关闭DHCP功能,则主机名修改生效,否则重启后,主机名依旧变为图示的IP地址   解决方法:经过排查,由/etc/sysconfig......
  • CentOS7 安装 mariadb
    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此......
  • CentOS7 编译安装最新的Linux Kernel 6.0 rc3
    哪个男孩不想手动编译一份自己的内核呢?安装编译环境CentOS7安装必要的包yumgroupinstall"DevelopmentTools"-y&&yuminstallopenssl-devel-y&&yuminstallrpm-buil......