当前位置: 首页 > news >正文

交叉编译gcc

文章目录

  • 前言
  • 下载
    • gcc下载
    • 依赖项下载
    • 其他依赖项
  • configure选项
    • --enable-languages
    • CXX和CXX_FOR_TARGET
    • CFLAGS和CXXFLAGS
    • --with-build-time-tools
  • 使用
  • 小结

前言

前一阵用qemu做了个基于virt板卡的虚拟机,在不断完善,这两天想添加一个gcc进去,于是编译了一下gcc
环境ubuntu22.04
交叉编译工具链是通过ct-ng制作的,详情参考制作 交叉编译工具链
gcc版本7.5

下载

gcc下载

我要编gcc-7.5
https://mirror.linux-ia64.org/gnu/gcc/releases/gcc-7.5.0/

依赖项下载

gcc有几项和数学相关的编译依赖
gmp:https://gmplib.org/#DOWNLOAD
mpfr:https://www.mpfr.org/mpfr-current/#download
mpc:https://www.multiprecision.org/mpc/download.html
这里说明下,如果编译x86的话,编译器能找到apt安装的这些包,但交叉编译用交叉编译找不到

当然自己把这些包下载下来编译好,然后用–with-gmp这些选项指定路径
但没必要

直接下载到gcc源码的路径下,然后解压重命名成gmp mpfr mpc文件夹,编gcc的时候他自己会顺带编译
↑信息来源于configure报错,所以说一点英语不会是真不行
在这里插入图片描述

其他依赖项

都编gcc了,其他依赖项肯定能搞定了

configure选项

../configure --prefix=/data/gcc \
--build=x86_64-linux-gnu --host=aarch64-kirin7-linux-gnu \--with-build-time-tools=/home/arco/x-tools/aarch64-kirin7-linux-gnu/bin \CC=aarch64-kirin7-linux-gnu-gcc CC_FOR_TARGET=aarch64-kirin7-linux-gnu-gcc \LD=aarch64-kirin7-linux-gnu-ld LD_FOR_TARGET=aarch64-kirin7-linux-gnu-ld \CXX=aarch64-kirin7-linux-gnu-g++ CXX_FOR_TARGET=aarch64-kirin7-linux-gnu-g++ \--enable-languages=c,c++ \CFLAGS='-g -O2 -Wno-error -s' CXXFLAGS='-g -O2 -Wno-error -s'

这是我配过最长的configure
在这里插入图片描述
下面是为啥要这么配的说明:

–enable-languages

这个选项就离谱,configure --help里没写
我百度搜了才知道有这么个选项
在这里插入图片描述

 --enable-languages=c,c++编译c和c++的编译器,其他的不编,浪费时间、也未必编的出来

CXX和CXX_FOR_TARGET

报错:error adding symbols: file in wrong format
在这里插入图片描述
很明显,他想用x86的链接器去链我aarch64架构的文件


CFLAGS和CXXFLAGS

在这里插入图片描述
-g -O2是本来就有的,需要加-Wno-error让他不要把警告视为错误,-s是我要剥离符号不然太大了


–with-build-time-tools

 --with-build-time-tools=/home/arco/x-tools/aarch64-kirin7-linux-gnu/bin

表面上看起来像是指定编译时使用工具的位置,但实际上似乎啥用也没有,如果不放心就加上吧(
我没再试了,编一次要不少时间呢


使用

编完了gcc,拉到我的aarch64虚拟机上去用
报错说没as
…?
好吧,as是binutils例的,又编了binutils弄到环境上,就可以使用gcc了

小结

我的交叉编译工具链的gcc版本是7.5,编gcc7.5成功了,编9.5失败了
原因不想看

所以如果要编更高版本的gcc,就去用更高版本的gcc编吧

http://www.lryc.cn/news/477067.html

相关文章:

  • [VUE]框架网页开发1 本地开发环境安装
  • 【MySQL】——数据库恢复技术
  • 乡村景区一体化系统(门票,餐饮,便利店,果园,娱乐,停车收费
  • 从零开始的c++之旅——继承
  • 电路知识的回顾
  • 使用 `Celery` 配合 `RabbitMQ` 作为消息代理,实现异步任务的调度、重试、定时任务以及错误监控等功能
  • react-router与react-router-dom的区别
  • 【研究生必看】把选题和文献交给AI,轻松搞定毕业论文!
  • Android中同步屏障(Sync Barrier)介绍
  • 真·香!深度体验 zCloud 数据库云管平台 -- DBA日常管理篇
  • 优雅的遍历JSONArray,获取里面的数据
  • C#:强大而优雅的编程语言
  • 一个由Deno和React驱动的静态网站生成器
  • Python pyautogui库:自动化操作的强大工具
  • 【HTML】——VSCode 基本使用入门和常见操作
  • 从0开始搭建一个生产级SpringBoot2.0.X项目(八)SpringBoot 使用Redis
  • Ubuntu20.04两种安装及配置中文界面、输入法、换源、共享文件夹实现,及注意事项
  • 后端Java学习:springboot之文件上传(阿里云OSS存储)
  • python通过lunarcalendar库使用农历日期
  • MySQL高级--范式与反范式
  • 实验05多重循环---7-02 打印矩形图案
  • 明源地产ERP WFWebService.asmx 反序列化RCE漏洞复现
  • 学习笔记:黑马程序员JavaWeb开发教程(2024.11.4)
  • 开源自托管数据管理工具全面指南
  • 护工系统|护工陪护软件|护工系统设计
  • 电商领域软件系统实战:基于TiDB的分布式数据库应用
  • 鸢尾博客项目开源
  • Google封号潮来袭!跨境卖家如何解封?
  • 路径规划 | ROS中多个路径规划算法可视化与性能对比分析
  • 使用 PyCharm 构建 FastAPI 项目:零基础入门 Web API 开发