GCC工具源码编译

文章目录

  • 背景
  • 一、下载源码
  • 二、编译前依赖准备
    • 2.1 相关工具依赖
    • 2.2 相关lib(gmp/ mpfr /mpc)依赖
      • 2.2.1 lib源码下载
      • 2.2.2 lib源码编译
  • 三、编译GCC
    • 3.1 编译
    • 3.2 链接
  • 四、报错处理

背景

日常可能涉及到系统里自带GCC版本与被编译源码存在不兼容,或者需要对GCC需要做一些定制化修改,因此需要通过源码编译出GCC工具的场景。


一、下载源码

下载地址:从清华源下载源码会快一些。
本文编译gcc目标工具为8.3.0版本,系统自带gcc工具为11.4版本需要被替换。

wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-8.3.0/gcc-8.3.0.tar.gz


二、编译前依赖准备

2.1 相关工具依赖

编译过程会涉及到一些工具的使用,需要看本机系统是否具备这些工具,如下是编译过程遇到需要相关工具需要必须被安装,具体需要看读者自己系统环境,见招拆招。

sudo apt install m4
sudo apt install libtool-bin
sudo apt install g++
sudo apt install gpp

2.2 相关lib(gmp/ mpfr /mpc)依赖

GCC编译过程会对这三个库有依赖:gmp, mpfr , mpc ,否则编译过程会报错。

2.2.1 lib源码下载

从如下3个链接获取gmp, mpfr , mpc 源码:

wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz

2.2.2 lib源码编译

安装过程要注意先后顺序,因为lib之间也有相互依赖。

  1. gmp编译

    cd gmp-6.1.0/
    ./configure --prefix=$(pwd)
    make & make install

    产出:libgmp.so

  2. mpfr编译
    mpfr会依赖到gmp的库。

    cd mpfr-3.1.4/
    ./configure --prefix=$(pwd)
    make & make install

    生成:
    libmpfr.so / libmpfr.a 位于lib下
    头文件位于include下

    如果过程如有报gmp的依赖报错,需要后加入依赖路径:

    –with-gmp-include=<gmp的头文件路径>
    –with-gmp-lib=<gmp的lib路径>

  3. mpc编译

    cd mpc-1.0.3/
    ./configure --prefix=$(pwd)
    make
    make install

    编译过程如有报mpfr的依赖报错,需要后加入依赖路径:

    –with-mpfr-include=<mpfr的头文件路径>
    –with-mpfr-lib=<mpfr的lib路径>


三、编译GCC

3.1 编译

执行如下命令开始编译:

 mkdir -p /usr/local/gcc-8.3.0  #存放编译产出cp mpfr-3.1.4/lib/libmpfr.so* /usr/lib/       #libmpfr库在日常编译会被依赖./configure --prefix=/usr/local/gcc-8.3.0       #指定产出路径--disable-multilib--with-gmp=<gmp-6.1.0 路径>--with-mpfr=<mpfr-3.1.4 路径>--with-mpc=<mpc-1.0.3 路径>make -j 16  # 16核同时编译make install

编译时间会比较久,耐心等待…
编译完成在/usr/local/gcc-8.3.0/bin下生成gcc工具
在这里插入图片描述
/usr/local/gcc-8.3.0/bin/gcc -v可以查看版本

3.2 链接

由于gcc工具在/usr/local/gcc-8.3.0/bin下,需要创建软链接,将系统gcc默认指向/usr/local/gcc-8.3.0/bin/gcc

which gcc #查看gcc路径。如果在/usr/bin/gcc且是个软链接
rm /usr/bin/gcc  #删除原软链接
ln -s /usr/local/gcc-8.3.0/bin/gcc /usr/bin/gcc  #重新建立软链接

这样就可以正常使用gcc做其他源码编译了。如果是要交叉编译arm gcc,流程也跟上面类似,只是编译工具用arm工具进行编译。


四、报错处理

  1. 编译过程可能有工具依赖相关的报错需要具体分析,但如果存在:sanitizer_common/sanitizer_internal_defs.h:xxx报错,需要屏蔽掉 configure 里的 target-libsanitizer这行再编译。在这里插入图片描述

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

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

相关文章

【MySQL】巧用 Dense_Rank 窗口函数

力扣题 1、题目地址 2084. 为订单类型为 0 的客户删除类型为 1 的订单 2、模拟表 活动表&#xff1a;Orders Column NameTypeorder_idintcustomer_idintorder_typeint order_id是此表的主键列。此表的每一行都表示订单的ID、订购该订单的客户的ID以及订单类型。订单可以是…

大模型背景下计算机视觉年终思考小结(一)

1. 引言 在过去的十年里&#xff0c;出现了许多涉及计算机视觉的项目&#xff0c;举例如下&#xff1a; 使用射线图像和其他医学图像领域的医学诊断应用使用卫星图像分析建筑物和土地利用率相关应用各种环境下的目标检测和跟踪&#xff0c;如交通流统计、自然环境垃圾检测估计…

JavaScript系列——Proxy(代理)

文章目录 概要Proxy 语法handler 对象的方法Proxy 示例常用handler 对象的方法的参数handler.get()语法示例 handler.set()语法示例 使用场景验证值修正及附加属性 小结 概要 Proxy 用于创建一个对象的代理&#xff0c;将对原对象上的操作&#xff08;属性获取、赋值、函数调用…

【SSM框架】初识Spring

初识Spring Spring家族 Spring发展到今天已经形成了一种开发的生态圈&#xff0c;Spring提供了若千个项目&#xff0c;每个项目用于完成特定的功能 ✅Spring Framework&#xff08;底层框架&#xff09;Spring Boot&#xff08;提高开发速度&#xff09;Spring Cloud&#xf…

第1课 ROS 系统介绍

1.ROS操作系统介绍 在学习ROS 系统前&#xff0c;我们需要先了解操作系统的定义。操作系统&#xff0c;顾名思义&#xff0c;即提供部分软件和硬件的接口&#xff0c;以供用户直接使用。因此&#xff0c;针对不同的平台、不同的功能&#xff0c;需要采用不同的操作系统来完成底…

C++ 具名要求-全库范围的概念 - 函数对象 (FunctionObject) ,对于不同输入值产生相同输出具有很低概率-散列(hash)

此页面中列出的具名要求&#xff0c;是 C 标准的规范性文本中使用的具名要求&#xff0c;用于定义标准库的期待。 某些具名要求在 C20 中正在以概念语言特性进行形式化。在那之前&#xff0c;确保以满足这些要求的模板实参实例化标准库模板是程序员的重担。若不这么做&#xf…

智能导诊-医院信息化建设标准

智能导诊系统主要依赖于自然语言处理和机器学习等技术。患者可以通过语音、文字等方式描述病情&#xff0c;系统通过自然语言处理技术对病情进行语义分析和理解。随后&#xff0c;机器学习算法对患者的症状和病情进行推理&#xff0c;结合已有的疾病知识库&#xff0c;为患者提…

canvas设置图形图案、文字图案

查看专栏目录 canvas示例教程100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

强化学习应用(二):基于Q-learning的物流配送路径规划研究(提供Python代码)

一、Q-learning算法简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于马尔可夫决策过程&#xff08;MDP&#xff09;的问题。它通过学习一个值函数来指导智能体在环境中做出决策&#xff0c;以最大化累积奖励。 Q-learning算法的核心思想是使用一个Q值函数来估计每…

AI大模型学习笔记一

一、商业观点&#xff1a;企业借助大模型获得业务增长可能 二、底层原理&#xff1a;transformer 1&#xff09;备注 ①下面每个步骤都是自回归的过程&#xff08;aotu-regressive&#xff09;&#xff1a;已输出内容的每个字作为输入&#xff0c;一起生成下一个字 ②合起来就…

华为OD机试2024年最新题库(Java)

我是一名软件开发培训机构老师&#xff0c;我的学生已经有上百人通过了华为OD机试&#xff0c;学生们每次考完试&#xff0c;会把题目拿出来一起交流分享。 重要&#xff1a;2024年1月-5月&#xff0c;考的都是OD统一考试&#xff08;C卷&#xff09;&#xff0c;题库已经整理…

8-docker-compose命令操作容器报“no configuration file provided: not found”

1.问题描述 docker-compose命令操作容器时,有时会报出“no configuration file provided: not found”问题 [root@centos79 opt]# docker-compose ps no configuration file provided: not found [root@centos79 opt]# 2.解决方案 最常见的原因是没有在docker-compose.yml文…

Promise高级版 - 通过输出题理解「Promise源码」

1 Promise源码分析 Promise的基本工作原理 Promise构造函数&#xff1a;Promise构造函数接受一个执行器函数作为参数&#xff0c;该函数有两个参数&#xff1a;resolve和reject。在构造函数内部&#xff0c;会创建一个Promise实例&#xff0c;并初始化其状态为pending。 状态…

【GNN2】PyG完成图分类任务,新手入门,保姆级教程

上次讲了如何给节点分类&#xff0c;这次我们来看如何用GNN完成图分类任务&#xff0c;也就是Graph-level的任务。 【GNN 1】PyG实现图神经网络&#xff0c;完成节点分类任务&#xff0c;人话、保姆级教程-CSDN博客 图分类就是以图为单位的分类&#xff0c;举个例子&#xff1…

设备树OF函数操作实验-读取设备节点backlight的整型属性

一. 简介 本文学习使用设备树操作 OF函数&#xff0c;读取设备节点的整型的属性值。 读取设备树文件 imx6ull-14x14-evk.dts 中一个设备节点的信息。这里读取 backlight设备节点的属性值&#xff1a;读取整型的属性。 注意&#xff1a;这里的整型数据都是 32位的数据。而非 …

Open3D 点云等比例缩放(20)

Open3D 点云等比例缩放(20) 一、算法介绍二、算法实现1.代码世人慌慌张张,不过图碎银几两, 偏偏这碎银几两,能解世间万种慌张。 一、算法介绍 实现这样一个功能,沿着中心,按照指定的比例,比如1/2,缩小或者放大点云,保存到新的文件中 二、算法实现 1.代码 import…

小程序基础学习(js混编)

在组件中使用外部js代码实现数据改变 先创建js文件 编写一些组件代码 编写外部js代码 在组件的js中引入外部js 在 app.json中添加路径规则 组件代码 <!--components/my-behavior/my-behavior.wxml--> <view><view>当前计数为{{count}}</view> <v…

操作系统复习 一、二章

操作系统复习 一、二章 文章目录 操作系统复习 一、二章第一章 计算机系统概述处理器中各寄存器的作用指令的执行过程中断存储器层次结构和CacheI/O 通信技术 第二章 操作系统概述大内核微内核大内核微内核 操作系统的定义、目标和功能定义目标和功能 操作系统的发展过程现代操…

Kibana:使用反向地理编码绘制自定义区域地图

Elastic 地图&#xff08;Maps&#xff09;附带预定义区域&#xff0c;可让你通过指标快速可视化区域。 地图还提供了绘制你自己的区域地图的功能。 你可以使用任何您想要的区域数据&#xff0c;只要你的源数据包含相应区域的标识符即可。 但是&#xff0c;当源数据不包含区域…

半监督学习 - 半监督K均值(Semi-Supervised K-Means)

什么是机器学习 半监督K均值&#xff08;Semi-Supervised K-Means&#xff09;是K均值聚类算法的一种扩展&#xff0c;它结合了有标签数据和无标签数据进行聚类。在传统的K均值算法中&#xff0c;所有数据点都是无标签的&#xff0c;而在半监督K均值中&#xff0c;我们允许一部…