【香菇带你学Linux】Linux环境下gcc编译安装【建议收藏】

news2024/9/24 11:23:02

文章目录

0. 前言

gcc(GNU Compiler Collection)是GNU项目的一部分,它是一个支持多种编程语言的编译器集合,但最常用的是作为C和C++的编译器。GCC能够编译、汇编和链接C、C++、Objective-C、Fortran、Ada、Go以及D等多种语言的程序。它因其跨平台性、高效性和灵活性而受到广泛的欢迎和使用。

我的系统类型规格如下,openeuler属于redhat/centos系列。Ubuntu系列主机本文仅供参考。

[root@localhost ~]# cat /etc/redhat-release 
BigCloud Enterprise Linux For Euler release 21.10 (LTS-SP2)
[root@localhost ~]# cat /etc/os-release 
NAME="BigCloud Enterprise Linux"
VERSION="21.10 (LTS-SP2)"
ID="bclinux"
VERSION_ID="21.10"
PRETTY_NAME="BigCloud Enterprise Linux For Euler 21.10 LTS"
ANSI_COLOR="0;31"

[root@localhost ~]# free -g
              total        used        free      shared  buff/cache   available
Mem:             15           0          14           0           0          14
Swap:             7           0           7

最近要在BClinux for openeuler上安装mysql8.0结果各种报错,缺少很多依赖。可惜系统自带的yum源要么就是没有这个安装包,要么就是软件版本不符合要求。所以只能选择源码编译安装。当前系统gcc版本为7.3.0,要升级到10以上.

安装gcc前需要安装GMP、MPFR、MPC这三个依赖库

# 查看当前系统gcc版本
root@localhost ~]# gcc --version
gcc (GCC) 7.3.0
Copyright © 2017 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。

1. 安装前准备工作

如果需要再root下直接安装,请参考文章最后的root下编译安装gcc脚本

1.1 创建weihu用户

养成良好安装习惯,不使用root直接安装。如果需要再root下安装,请略过本文1.1小节即可

这里我们注册一个weihu用户,并赋予维护用户sudo权限。然后使用weihu用户安装

# 创建weihu用户
[root@localhost ~]# useradd -m weihu
# 设置weihu的密码
[root@localhost ~]# passwd weihu
更改用户 weihu 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

赋予weihu用户sudo权限

# 编辑 /etc/sudoers文件 ,找到下面的一行内容
# root    ALL=(ALL)       ALL
[root@localhost ~]# vi /etc/sudoers

image-20240713224548148

root ALL=(ALL) ALL这一行下面添加

image-20240713224650697

保存退出

接下来的所有操作均在weihu用户下面操作

# 登录weihu用户
[root@localhost ~]# su - weihu

1.2 安装依赖包

编译安装gcc之前,需要安装GMP、MPFR、MPC三个依赖。且三个依赖包的安装顺序由先后。同样,我们也需要分别编译安装(使用yum安装的版本较低,报错较多)

安装之前,先建个文件夹用于存放源码

# 将
[weihu@localhost ~]$ mkdir /home/weihu/soft
[weihu@localhost ~]$ cd /home/weihu/soft

1.2.1 安装 GMP

CMP下载网址:https://gcc.gnu.org/pub/gcc/infrastructure/

这里我们下周最新的版本6.2.1版本

image-20240713225541261

可以下载到本地再上传到Linux主机,若Linux主机可以访问公网,也可以通过wget方向直接下载到Linux主机。

这里我选择第二种方法。

# 下载gmp-6.2.1.tar.bz2源码
[weihu@localhost ~]$ cd /home/weihu/soft/
[weihu@localhost soft]$ wget https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.2.1.tar.bz2
# 解压gmp-6.2.1.tar.bz2源码
[weihu@localhost soft]$ tar -xvf gmp-6.2.1.tar.bz2
# 进入解压后的文件夹
[weihu@localhost soft]$ cd gmp-6.2.1/
# #创建并进入安装目录
[weihu@localhost gmp-6.2.1]$ mkdir build
[weihu@localhost gmp-6.2.1]$ cd build
[weihu@localhost build]$ 
# #配置安装
[weihu@localhost build]$ ../configure -prefix=/usr/local/gmp-6.2.1
# 编译
weihu@localhost build]$ make -j$(nproc)
# 安装
[weihu@localhost build]$ sudo make install

这样就把gmp安装在/usr/local/gmp-6.2.1路径下

在进行编译安装的时候。我用的命令为 make -j$(nproc)

使用 -j 选项可以指定同时运行的作业(即编译任务)的最大数量。如果 -j 后面跟的是一个数字,那么 make 会尝试同时运行指定数量的作业。如果不跟数字,或者跟的是 0make 会尝试同时运行尽可能多的作业。

1.2.2 安装MPFR

MPFR下载网址:https://gcc.gnu.org/pub/gcc/infrastructure/

本次,我们选择MPFR版本为4.1.0

# 下载源码
[weihu@localhost ~]$ cd /home/weihu/soft/
[weihu@localhost soft]$ wget https://gcc.gnu.org/pub/gcc/infrastructure/mpfr-4.1.0.tar.bz2
# 解压mpfr-4.1.0.tar.bz2
[weihu@localhost soft]$ tar -xvf mpfr-4.1.0.tar.bz2 
# 进入解压后的文件
[weihu@localhost soft]$ cd mpfr-4.1.0/
# 新建构建文件夹并进入
weihu@localhost mpfr-4.1.0]$ mkdir build 
weihu@localhost mpfr-4.1.0]$  cd build
# 配置安装
[weihu@localhost build]$ ../configure --prefix=/usr/local/mpfr-4.1.0 --with-gmp=/usr/local/gmp-6.2.1 
# 编译
[weihu@localhost build]$ make -j$(nproc)
# 安装
[weihu@localhost build]$ sudo make install

这样就把mpfr-4.1.0安装在/usr/local/mpfr-4.1.0路径下

1.2.3 安装MPC

PC下载网址:https://gcc.gnu.org/pub/gcc/infrastructure/

本次,我们选择MPC版本为1.2.1

# 下载源码
[weihu@localhost soft]$ cd /home/weihu/soft
[weihu@localhost soft]$ wget https://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.2.1.tar.gz
#解压源码
[weihu@localhost soft]$ tar -xvf mpc-1.2.1.tar.gz 
# 进入解压后的文件夹
[weihu@localhost soft]$ cd mpc-1.2.1/
# 创建构建文件夹并进入
[weihu@localhost mpc-1.2.1]$ mkdir build
[weihu@localhost mpc-1.2.1]$ cd build
#配置安装
[weihu@localhost build]$ ../configure --prefix=/usr/local/mpc-1.2.1 --with-gmp=/usr/local/gmp-6.2.1 --with-mpfr=/usr/local/mpfr-4.1.0
# 编译
[weihu@localhost build]$ make -j$(nproc)
# 安装
[weihu@localhost build]$ sudo make install

这样就把mpc-1.2.1安装在/usr/local/mpc-1.2.1路径下

2. gcc10.0.1版本安装

gcc源码下载地址:https://gcc.gnu.org/pub/gcc/releases/

本次我们选择gcc-10.1.0.tar.gz安装

# 下载源码
[weihu@localhost soft]$ cd /home/weihu/soft
[weihu@localhost soft]$ wget https://gcc.gnu.org/pub/gcc/releases/gcc-10.1.0/gcc-10.1.0.tar.gz
# 解压源码并进入
[weihu@localhost soft]$ tar -xvzf gcc-10.1.0.tar.gz 
[weihu@localhost soft]$ cd gcc-10.1.0/
# 创建构建文件夹并进入
[weihu@localhost gcc-10.1.0]$ mkdir build
[weihu@localhost gcc-10.1.0]$ cd build
# 配置安装
[weihu@localhost build]$ ../configure --prefix=/usr/local/gcc-10.1.0 -enable-threads=posix -disable-checking -disable-multilib -enable-languages=c,c++ --with-gmp=/usr/local/gmp-6.2.1 --with-mpfr=/usr/local/mpfr-4.1.0 --with-mpc=/usr/local/mpc-1.2.1
# 编译(时间较长)
[weihu@localhost build]$ make -j$(nproc)
# 安装
[weihu@localhost build]$ sudo make install

gcc至此安装成功,然后我们将gcc添加进入系统环境变量

# 软链接
[weihu@localhost ~]$ sudo ln -s /usr/local/gcc-10.1.0/bin/gcc gcc 
[weihu@localhost ~]$ sudo ln -s /usr/local/gcc-10.1.0/bin/g++ g++
[weihu@localhost ~]$ export PATH=/usr/local/gcc-10.1.0/bin:$PATH

查看gcc版本

[weihu@localhost ~]$ gcc --version
gcc (GCC) 10.1.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[weihu@localhost ~]$ 

3. 报错解决

3. 1. wget下载报错

[weihu@localhost soft]$ wget https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.2.1.tar.bz2
--2024-03-28 00:17:13--  https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.2.1.tar.bz2
Resolving gcc.gnu.org (gcc.gnu.org)... 8.43.85.97, 2620:52:3:1:0:246e:9693:128c
Connecting to gcc.gnu.org (gcc.gnu.org)|8.43.85.97|:443... connected.
ERROR: The certificate of ‘gcc.gnu.org’ is not trusted.
ERROR: The certificate of ‘gcc.gnu.org’ is not yet activated.
The certificate has not yet been activated

解决方法·

## 绕过 SSL 验证
wget --no-check-certificate https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.2.1.tar.bz2

4. 参考文档

  • https://cloud.tencent.com/developer/article/2112576

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1924487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode-203-移除链表元素-临时变量作用域-c++

题目详见https://leetcode.cn/problems/remove-linked-list-elements/ 题解代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullpt…

动手学深度学习(Pytorch版)代码实践 -注意力机制-Transformer

68Transformer 1. PositionWiseFFN 基于位置的前馈网络 原理:这是一个应用于每个位置的前馈神经网络。它使用相同的多层感知机(MLP)对序列中的每个位置独立进行变换。作用:对输入序列的每个位置独立地进行非线性变换&#xff0c…

【Python】数据分析-Matplotlib绘图

数据分析 Jupyter Notebook Jupyter Notebook: 一款用于编程、文档、笔记和展示的软件。 启动命令: jupyter notebookMatplotlib 设置中文格式:plt.rcParams[font.sans-serif] [KaiTi] # 查看本地所有字体 import matplotlib.font_manager a sorted…

《昇思25天学习打卡营第17天|K近邻算法实现红酒聚类》

K近邻算法原理介绍 K近邻算法(K-Nearest-Neighbor, KNN)是一种用于分类和回归的非参数统计方法,最初由 Cover和Hart于1968年提出是机器学习最基础的算法之一。它正是基于以上思想:要确定一个样本的类别,可以计算它与所…

Linux-指令

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

韦东山嵌入式linux系列-具体单板的 LED 驱动程序

笔者使用的是STM32MP157的板子 1 怎么写 LED 驱动程序? 详细步骤如下: ① 看原理图确定引脚,确定引脚输出什么电平才能点亮/熄灭 LED ② 看主芯片手册,确定寄存器操作方法:哪些寄存器?哪些位?…

链接追踪系列-00.es设置日志保存7天-番外篇

索引生命周期策略 ELK日志我们一般都是按天存储,例如索引名为"zipkin-span-2023-03-24",因为日志量所占的存储是非常大的,我们不能一直保存,而是要定期清理旧的,这里就以保留7天日志为例。 自动清理7天以前…

Pytorch中nn.Sequential()函数创建网络的几种方法

1. 创作灵感 在创建大型网络的时候,如果使用nn.Sequential()将几个有紧密联系的运算组成一个序列,可以使网络的结构更加清晰。 2.应用举例 为了记录nn.Sequential()的用法,搭建以下测试网络&…

node js 快速构建部署 Wiki 风格的文档网站

easy-wiki 快速构建 项目地址 :https://github.com/enncy/easy-wiki 教程文档 :https://enncy.github.io/easy-wiki/index.html 本文将介绍如何通过内置插件快速构建 WIKI 文档,并自带侧边栏,顶部栏,丰富样式等功能 #…

WEB前端03-CSS3基础

CSS3基础 1.CSS基本概念 CSS是Cascading Style Sheets(层叠样式表)的缩写,它是一种对Web文档添加样式的简单机制,是一种表现HTML或XML等文件外观样式的计算机语言,是一种网页排版和布局设计的技术。 CSS的特点 纯C…

maven的settings.xml无法正确配置本地仓库路径

因为以前使用过新版的maven,现在要换个版本使用。 在配置新的本地仓库路径的时候突然发现居然idea居然识别不了我settings.xml里面配置的路径。 我很是震惊,明明之前一直都是这样子配置的。怎么突然间不行了。当我冥思苦想,在网上搜寻资料无果…

02:项目二:感应开关盖垃圾桶

感应开关盖垃圾桶 1、PWM开发SG901.1、怎样通过C51单片机输出PWM波?1.2、通过定时器输出PWM波来控制SG90 2、超声波测距模块的使用3、感应开关盖垃圾桶 需要材料: 1、SG90舵机模块 2、HC-SR04超声波模块 3、震动传感器 4、蜂鸣器 5、若干杜邦线 1、PWM开…

【深度学习 pytorch】迁移学习 (迁移ResNet18)

李宏毅深度学习笔记 《深度学习原理Pytorch实战》 https://blog.csdn.net/peter6768/article/details/135712687 迁移学习 实际应用中很多任务的数据的标注成本很高,无法获得充足的训练数据,这种情况可以使用迁移学习(transfer learning)。假设A、B是两…

第三期闯关基础岛

1、 Linux 基础知识 任务描述完成所需时间闯关任务完成SSH连接与端口映射并运行hello_world.py10min可选任务 1将Linux基础命令在开发机上完成一遍10min可选任务 2使用 VSCODE 远程连接开发机并创建一个conda环境10min可选任务 3创建并运行test.sh文件10min 1.1、SSH连接 使用…

Android Spinner

1. Spinner Spinner是下拉列表,如图3-14所示,通常用于为用户提供选择输入。Spinner有一个重要的属性:spinnerMode,它有2种情况: 属性值为dropdown时,表示Spinner的数据下拉展示,如图1&#xf…

自己动手写一个滑动验证码组件(后端为Spring Boot项目)

近期参加的项目,主管丢给我一个任务,说要支持滑动验证码。我身为50岁的软件攻城狮,当时正背着双手,好像一个受训的保安似的,中规中矩地参加每日站会,心想滑动验证码在今时今日已经是标配了,司空…

jenkins系列-06.harbor

https://github.com/goharbor/harbor/releases?page2 https://github.com/goharbor/harbor/releases/download/v2.3.4/harbor-offline-installer-v2.3.4.tgz harbor官网:https://goharbor.io/ 点击 Download now 链接,会自动跳转到上述github页面&am…

采用自动微分进行模型的训练

自动微分训练模型 简单代码实现: import torch import torch.nn as nn import torch.optim as optim# 定义一个简单的线性回归模型 class LinearRegression(nn.Module):def __init__(self):super(LinearRegression, self).__init__()self.linear nn.Linear(1, 1) …

python:使用matplotlib库绘制图像(四)

作者是跟着http://t.csdnimg.cn/4fVW0学习的,matplotlib系列文章是http://t.csdnimg.cn/4fVW0的自己学习过程中整理的详细说明版本,对小白更友好哦! 四、条形图 1. 一个数据样本的条形图 条形图:常用于比较不同类别的数量或值&…

DockerCompose介绍,安装,使用

DockerCompose 1、Compose介绍 将单机服务-通过Dockerfile 构建为镜像 -docker run 成为一个服务 user 8080 net 7000 pay 8181 admin 5000 监控 .... docker run 单机版、一个个容器启动和停止问题: 前面我们使用Docker的时候,定义 Dockerfil…