GCC工具源码编译

news2024/12/24 9:15:34

文章目录

  • 背景
  • 一、下载源码
  • 二、编译前依赖准备
    • 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.coloradmin.cn/o/1382048.html

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

相关文章

64位ATT汇编语言整数乘法printf输出

multiplyWithPrint.s里边的内容如下 .section .datastringToShow:.ascii "%d\n\0" .global main .section .text main:movq $4,%raxmovq $2,%rdi# mulq 默认带上rax进行乘积&#xff0c;可以省略rax中的乘数&#xff0c;最后积会放到rax里边。mulq %rdi# C语言的pri…

解决MPICH的GPU初始化失败:一次深入探索

今天来分享“MPICH&#xff1a;MPII_Init_thread(222): gpu_init failed”这个问题的解决方式 文章目录 前言问题原因解决方案 前言 如果在安装MPICH的时候没有注意要一些选项&#xff0c;那么当使用mpicxx mpi_send.cpp -o send && mpirun -n 2 ./send进行编译输出的…

如何调整 Windows 11 任务栏位置、对齐方式,及自定义任务栏

更新于&#xff1a;2023-11-22 分类&#xff1a;Windows 阅读(115407) 评论(12) 如果你是 Windows 11 用户中的一员&#xff0c;一定在不断尝试它的新功能。Windows 11 操作系统采用了全新设计的外观&#xff0c;具有重新设计的 Windows 资源管理器、圆润的窗口边缘和默认将应用…

管理软件供应链中网络安全工具蔓延的三种方法

软件开发组织不断发展&#xff0c;团队成长&#xff0c;项目数量增加。技术堆栈发生变化&#xff0c;技术和管理决策变得更加分散。 在这一演变过程中&#xff0c;该组织的 AppSec 工具组合也在不断增长。在动态组织中&#xff0c;这可能会导致“工具蔓延”。庞大的 AppSec 工…

设计模式 代理模式(静态代理 动态代理) 与 Spring Aop源码分析 具体是如何创建Aop代理的

代理模式 代理模式是一种结构型设计模式&#xff0c;它通过创建一个代理对象来控制对真实对象的访问。这种模式可以用于提供额外的功能操作&#xff0c;或者扩展目标对象的功能。 在代理模式中&#xff0c;代理对象与真实对象实现相同的接口&#xff0c;以便在任何地方都可以使…

爬虫补环境jsdom、proxy、Selenium案例:某条

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 一、简介 爬虫逆向补环境的目的是为了模拟正常用户的行为&#xff0c;使爬虫看起来更像是一个真实的用户在浏览网站。这样可以…

OceanBase 4.2特性解读:Show Trace全链路跟踪,助力快速问题定位与精准诊断

在分布式数据库环境下&#xff0c;慢 SQL 诊断是运维人员面临的一大挑战。在无法及时发现问题根本原因的情况下&#xff0c;可能会严重影响用户体验&#xff0c;甚至会导致业务服务不可用。相对于单机数据库&#xff0c;分布式数据库系统涉及多个节点、多组件的协同工作&#x…

Python之jieba分词相关介绍

1.jieba分词的安装 直接在cmd窗口当中pip install即可 2.jieba分词的介绍 jieba分词是目前比较好的中文分词组件之一&#xff0c;jieba分词支持三种模式的分词(精确模式、全模式、搜索引擎模式)&#xff0c;并且支持自定义词典(这一点在特定的领域很重要&#xff0c;有时候…

【计算机网络】内容整理

概述 分组交换 分组交换则采用存储转发&#xff08;整个包必须到达路由器&#xff0c;然后才能在下一个链路上传输)技术。 在发送端&#xff0c;先把较长的报文划分成较短的、固定长度的数据段。 电路交换 在端系统间通信会话期间&#xff0c;预留了端系统间沿路径通信所需…

开源云原生安全的现状

近年来&#xff0c;人们非常重视软件供应链的安全。尤其令人担忧的是开源软件发行版中固有的风险越来越多。这引发了围绕云原生开源安全的大量开发&#xff0c;其形式包括软件物料清单 (SBOM)、旨在验证 OSS 包来源的项目等。 许多组织循环使用大型开源包&#xff0c;但只使用…

第 3 场 小白入门赛(1~6) + 第 3 场 强者挑战赛 (1 ~ 5)

第 3 场 小白入门赛 1、厉不厉害你坤哥&#xff08;暴力&#xff09; 2、思维 3、暴力&#xff0c;前缀和&#xff0c;贪心 4、二分 5、DP 6、容斥&#xff0c;双指针 第 3 场 强者挑战赛 2、BFS 5、树上倍增求第k祖先 1. 召唤神坤 题意&#xff1a; 可以发现,如果我…

2023 IoTDB Summit:天谋科技高级开发工程师苏宇荣《汇其流:如何用 IoTDB 流处理框架玩转端边云融合》...

12 月 3 日&#xff0c;2023 IoTDB 用户大会在北京成功举行&#xff0c;收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题&#xff0c;多位学术泰斗、企业代表、开发者&#xff0c;深度分享了工业物联网时序数据库 IoTDB 的技术创新…

Git相关3 —— 命令及添加Gitee的公钥

1.Git相关命令1 -- 工作目录、暂存区、本地仓库、 使用平台有&#xff1a;cmd、Git bash、VSCode window系统修改VSCode默认终端为git bash git init 初始化 --- 新增.git 文件夹 git status 查看 文件/文件夹 状态 git add 需要追踪的文件名/文件夹名 提交到暂存区 git add…

【JavaSE语法】图书管理系统实现详解

图片出处&#xff1a;The worlds biggest drone photo and video sharing platform | SkyPixel.com 导言 在学完JavaSE语法后&#xff0c;我们就可以去尝试写一个简单的图书管理系统来进一步提升我们面对对象编程的思想。在该系统中会涉及到数组&#xff0c;接口&#xff0c;封…

OceanBase架构概览

了解一个系统或软件&#xff0c;比较好的一种方式是了解其架构&#xff0c;下图是官网上的架构图&#xff0c;基于V 4.2.1版本 OceanBase 使用通用服务器硬件&#xff0c;依赖本地存储&#xff0c;分布式部署在多个服务器上&#xff0c;每个服务器都是对等的&#xff0c;数据库…

YOLOv8改进 | 注意力篇 | 实现级联群体注意力机制CGAttention (全网首发)

一、本文介绍 本文给大家带来的改进机制是实现级联群体注意力机制CascadedGroupAttention,其主要思想为增强输入到注意力头的特征的多样性。与以前的自注意力不同,它为每个头提供不同的输入分割,并跨头级联输出特征。这种方法不仅减少了多头注意力中的计算冗余,而且通过增…

【国内访问github不稳定】可以尝试fastgithub解决这个问题

1、下载 https://github.com/dotnetcore/FastGithub https://github.com/dotnetcore/FastGithub/releases 官网下载即可&#xff0c;比如&#xff0c;我用的是这个&#xff1a;fastgithub_osx-x64.zip&#xff08;点这里下载&#xff09; 2、安装 如下图双击启动即可 3、…

【SSM框架】SpringMVC

SpringMVC简介 SpringMVC概述 SpringMvC是一种基于Java实现MVC模型的轻量级web框架 SpringMVC技术与Servlet技术功能等同&#xff0c;用于表现层功能开发 SpringMVC入门 1、导入坐标 <dependency><groupId>javax.servlet</groupId><artifactId>ja…

Docker安装Odoo17

Docker安装Odoo 前言所需环境安装步骤登录Odoo 配置数据库 前言 Odoo是一个开源的ERP框架&#xff0c;它提供了一套完整的、可定制的、模块化的企业管理软件解决方案。以下是Odoo的主要特点&#xff1a; 模块化设计&#xff1a;Odoo的各个功能都以模块的形式提供&#xff0c;包…

三端负电源电压调节器79LXX,具有一系列固定电压输出,适用于小于100mA电源供给的场合

79LXX系列三端负电源电压调节器是单片双极型线性集成电路&#xff0c;采用TO92、SOT89-3的封装形式封装&#xff0c;有一系列固定的电压输出&#xff0c;适用于小于100mA电源供给的场合。 主要特点&#xff1a; 最大输出电流为100mA 固定输出电压分别为-5V、-6V、-8V、-9V、-10…