centos8 安装gcc4.8.5/g++4.8.5【实测经验】

2023-10-19 18:50

本文主要是介绍centos8 安装gcc4.8.5/g++4.8.5【实测经验】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1,先安装高版本gcc

2,安装gcc4.8.5

2.1,下载gcc4.8.5源码

2.2,编译&&安装

3,建立gcc的软连接

4,编译gcc4.8.5中的错误

4.1,错误1

4.2,错误2

4.3,错误3

4.4,错误4

4.5,错误5

4.6,错误6


        本人搭建工作站的时候,vcs需要使用到gcc,而且高版本的还不行,故在centos8中安装gcc4.8.5。

1,先安装高版本gcc

        安装gcc4.8.5的时候还需要使用gcc来编译,所以需要先安装一个默认版本的gcc,然后再通过这个默认的gcc去编译gcc4.8.5,才能完成安装。

        在terminal中通过如下命令可以看到目前是否安装了gcc,而且可以看到gcc的版本。

gcc -v

        没有安装的就可以通过安装“Development Tools”来进行一起安装。默认的CentOS存储库包含一个名为“Development Tools”的软件包组,其中包括GNU编译器集合,GNU调试器以及编译软件所需的其他开发库和工具。

        GNU编译器集合(GCC)是C,C ++,Objective-C,Fortran,Ada,Go和D编程语言的编译器和库的集合。许多开源项目,包括Linux内核和GNU工具,都是使用GCC编译的。

        在ternimal中通过如下命令安装,然后再通过gcc -v即可看到安装的gcc版本。

sudo dnf group install "Development Tools"
gcc -v
g++ -v

        我安装后gcc和g++都为8.4.1版本

2,安装gcc4.8.5

2.1,下载gcc4.8.5源码

        下载速度较慢

wget ftp://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.gz

                下载完成后还需要下载依赖包。编译安装 GCC 需要依赖 mpc,mpfr,gmp包。好在 GCC 源码里自带脚本可以轻松下载依赖包。

tar zxf gcc-4.8.5.tar.gz
cd gcc-4.8.5
./contrib/download_prerequisites

2.2,编译&&安装

        在gcc-4.8.5目录下新建一个编译目录,然后进行编译。 --prefix 参数代表后续安装的地方,我选择后续安装到/usr/local/gcc4.8.5。make过程中的错误全部放在第四节。

mkdir gcc-build-4.8.5
cd gcc-build-4.8.5
../configure --prefix=/usr/local/gcc4.8.5 --enable-checking=release --enable-languages=c,c++ --disable-multilib
make
make install

3,建立gcc的软连接

【注意】 下面操作gcc与g++的处理一样,g++就不再重复。

        安装完成后,可以通过gcc -v看到gcc还是8.4.1版本,这是因为系统默认使用的就是/usr/bin/gcc,which gcc可以看到目前系统使用的gcc的位置,然后查找系统中安装的所有gcc。

which gcc
sudo fine / -name gcc

     通过/usr/bin/gcc -v即可以看到该gcc的版本,我安装的4.8.5版本位于/usr/local/gcc4.8.5/bin/gcc

cd /usr/bin/
mv gcc gcc8.4.1
mv g++ g++8.4.1
ln -snf /usr/local/gcc4.8.5/bin/gcc  ./gcc
ln -snf /usr/local/gcc4.8.5/bin/g++  ./g++

        然后通过gcc -v即可看到gcc为4.8.4版本了。

4,编译gcc4.8.5中的错误

        在使用新版本(8.4.1)的gcc编译老版本(4.8.5)的过程中,会有很多错误,我遇到过的都整理如下

4.1,错误1

cfns.gperf:101:1: error: 'const char* libc_name_p(const char*, unsigned int)' redeclared inline

        通过修改gcc4.8.5源码解决。按照下面网页中的修改即可,+代表增加,-代表删除。主要修改cfns.gperf、cfns.h、except.c、Make-lang.in这几个文件。参考:

https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=ec1cc0263f156f70693a62cf17b254a0029f4852

4.2,错误2

In file included from ../../../../libgcc/unwind-dw2.c:405:0:
./md-unwind-support.h: In function ‘x86_fallback_frame_state’:
./md-unwind-support.h:141:18: error: field ‘uc’ has incomplete typestruct ucontext uc;

        找到gcc-build-4.8.5/x86_64-unknown-linux-gnu/libgcc/md-unwind-support.h文件,在61行和141行将struct ucontext改成struct ucontext_t即可。

        参考:https://blog.xuegaogg.com/posts/105/

4.3,错误3

/usr/local/gcc_package_4.8.5/gcc-4.8.5/gcc-build-4.8.5/./gcc/cc1plus: /usr/local/gcc_package_4.8.5/gcc-4.8.5/gcc-build-4.8.5/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /usr/local/gcc_package_4.8.5/gcc-4.8.5/gcc-build-4.8.5/./gcc/cc1plus)

         查看支持的CXXABI版本:

strings /usr/lib64/libstdc++.so.6 | grep CXXABI

 

        发现其支持CXXABI_1.3.9,但是编译的时候使用的/usr/local/gcc_package_4.8.5/gcc-4.8.5/gcc-build-4.8.5/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6 是不支持 CXXABI_1.3.9的。

        删除gcc-4.8.5源码中的libstdc++.so.6,然后建立软连接link到/usr/lib64/libstdc++.so.6

cd ./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/
rm -rf libstdc++.so.6
ln -snf /usr/lib64/libstdc++.so.6  ./libstdc++.so.6

4.4,错误4

../../../../gcc-host/libsanitizer/asan/asan_linux.cc: In function 'bool 
__asan::AsanInterceptsSignal(int)':
../../../../gcc-host/libsanitizer/asan/asan_linux.cc:222:20: error: 'SIGSEGV' 
was not declared in this scopereturn signum == SIGSEGV && common_flags()->handle_segv;

        在asan_linux.cc中添加头文件#include 即可

#include <signal.h>

参考:https://bugs.busybox.net/show_bug.cgi?id=10061

参考:https://www.mail-archive.com/gcc-patches@gcc.gnu.org/msg159613.html

4.5,错误5

../../../../libsanitizer/tsan/tsan_platform_linux.cc: In function ‘int __tsan::ExtractResolvFDs(void*, int*, int)’:
../../../../libsanitizer/tsan/tsan_platform_linux.cc:295:16: error: ‘statp’ was not declared in this scope__res_state *statp = (__res_state*)state;^
../../../../libsanitizer/tsan/tsan_platform_linux.cc:295:37: error: expected primary-expression before ‘)’ token__res_state *statp = (__res_state*)state;^
../../../../libsanitizer/tsan/tsan_platform_linux.cc:295:38: error: expected ‘;’ before ‘state’__res_state *statp = (__res_state*)state;

        将第一行代码修改为第二行代码

 __res_state *statp = (__res_state*)state;struct __res_state *statp = (struct __res_state*)state;

4.6,错误6

        编译和安装过程中可能会遇到,可以忽略。这时候可以看到已经有/usr/local/4.8.5目录了,安装成功。

make[7]: Entering directory '/usr/local/gcc_package_4.8.5/gcc-4.8.5/gcc-build-4.8.5/x86_64-unknown-linux-gnu/32/libatomic'
Making all in testsuite
make[8]: Entering directory '/usr/local/gcc_package_4.8.5/gcc-4.8.5/gcc-build-4.8.5/x86_64-unknown-linux-gnu/32/libatomic/testsuite'
make[8]: Nothing to be done for 'all'.
make[8]: Leaving directory '/usr/local/gcc_package_4.8.5/gcc-4.8.5/gcc-build-4.8.5/x86_64-unknown-linux-gnu/32/libatomic/testsuite'
make[8]: Entering directory '/usr/local/gcc_package_4.8.5/gcc-4.8.5/gcc-build-4.8.5/x86_64-unknown-linux-gnu/32/libatomic'

参考文章:

​​​​​​如何在CentOS 8上安装GCC开发工具(Development Tools)_Linux教程_Linux公社-Linux系统门户网站 (linuxidc.com)

CentOS 7.6对gcc版本降级_xzz3493的博客-CSDN博客_centos gcc降级

 CentOS升级gcc4.8.5_fydsw1314的专栏-CSDN博客

 ubuntu16.04安装gcc5.4.0问题记录(实测)_HeyMountain的博客-CSDN博客

这篇关于centos8 安装gcc4.8.5/g++4.8.5【实测经验】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/241688

相关文章

ubuntu20.0.4系统中安装Anaconda的超详细图文教程

《ubuntu20.0.4系统中安装Anaconda的超详细图文教程》:本文主要介绍了在Ubuntu系统中如何下载和安装Anaconda,提供了两种方法,详细内容请阅读本文,希望能对你有所帮助... 本文介绍了在Ubuntu系统中如何下载和安装Anaconda。提供了两种方法,包括通过网页手动下载和使用wg

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo

ubuntu16.04如何部署dify? 在Linux上安装部署Dify的技巧

《ubuntu16.04如何部署dify?在Linux上安装部署Dify的技巧》随着云计算和容器技术的快速发展,Docker已经成为现代软件开发和部署的重要工具之一,Dify作为一款优秀的云原生应用... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。它

Docker安装MySQL镜像的详细步骤(适合新手小白)

《Docker安装MySQL镜像的详细步骤(适合新手小白)》本文详细介绍了如何在Ubuntu环境下使用Docker安装MySQL5.7版本,包括从官网拉取镜像、配置MySQL容器、设置权限及内网部署,... 目录前言安装1.访问docker镜像仓库官网2.找到对应的版本,复制右侧的命令即可3.查看镜像4.启

debian12安装docker的实现步骤

《debian12安装docker的实现步骤》本文主要介绍了debian12安装docker的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录步骤 1:更新你的系统步骤 2:安装依赖项步骤 3:添加 docker 的官方 GPG 密钥步骤

Win安装MySQL8全过程

《Win安装MySQL8全过程》:本文主要介绍Win安装MySQL8全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Win安装mysql81、下载MySQL2、解压文件3、新建文件夹data,用于保存数据库数据文件4、在mysql根目录下新建文件my.ini

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

Maven如何手动安装依赖到本地仓库

《Maven如何手动安装依赖到本地仓库》:本文主要介绍Maven如何手动安装依赖到本地仓库问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、下载依赖二、安装 JAR 文件到本地仓库三、验证安装四、在项目中使用该依赖1、注意事项2、额外提示总结一、下载依赖登

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh