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

GCC:Linux x86_64 编译 Linux aarch64 上运行的程序


更多内容:XiaoJ的知识星球


目录

  • 1.编译知识介绍:
  • 2.交叉编译工具链安装使用
    • 2.1 apt安装
    • 2.2 arm官网安装
  • 3.交叉编译C/C++程序(主机上运行)
  • 4.运行(arm64上运行)


本文,将介绍在Linux x86_64平台编译在Linux aarch64(ARM64)上能运行的C/C++程序。即:

  • 编译器运行在X86_64架构平台上,编译生成Linux aarch64(ARM64)架构的可执行程序。

1.编译知识介绍:

编译类型:

  • 编译器和目标程序都是相同架构的编译过程,被称为 本地编译

  • 编译器和目标程序运行在不同架构的编译过程,被称为 交叉编译

编译工具链命名:如 gcc-arm-xxx-x86_64-aarch64-none-linux-gnu:

  • gcc-arm-xxx: 表示ARM 架构工具链。

  • x86_64: 工具链的目标平台。

  • aarch64: 生成的可执行文件或目标代码的目标架构,默认采用小端字节序。

  • none: 表示没特定的操作系统相关组件,该工具链是为嵌入式系统或特定目标架构而构建的,而不是针对特定的操作系统。

  • linux-gnu: 表示生成的可执行文件或目标代码适用于 Linux 系统,并使用 GNU C 库(glibc)作为默认的 C 库。

2.交叉编译工具链安装使用

安装交叉编译工具链有如下三种方式:

  • Ubuntu下使用apt工具安装。

  • 下载第三方制作好的工具链,如arm官网、Linaro等等。

  • 使用crosstool-ng根据需要自己制作(过程复杂,不推荐)。

2.1 apt安装

#在主机上执行如下命令
sudo apt install gcc-aarch64-linux-gnu#安装完成后使用如下命令查看版本
aarch64-linux-gnu-gcc -v

2.2 arm官网安装

可以到arm官网下载编译链压缩包。

官网为:https://developer.arm.com/downloads/-/gnu-a

# 下载
wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.2-2020.11/binrel/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz?revision=972019b5-912f-4ae6-864a-f61f570e2e7e&rev=972019b5912f4ae6864af61f570e2e7e&hash=90B272942CAC63CBE2787E5F43E7B2C6D0AB20D6#解压
tar xvf gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/
#查看编译工具
ls gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/#导出环境变量
export PATH=<you_path>/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin:$PATH#查看编译器信息
aarch64-none-linux-gnu-gcc -v

3.交叉编译C/C++程序(主机上运行)

安装好交叉编译器后,直接使用它对程序进行交叉编译即可。

# 在主机上运行# 在main.c程序所在的目录执行如下命令
aarch64-none-linux-gnu-gcc main.c –o main.elf
# 或
aarch64-none-linux-gnu-g++ main.cpp –o main.elf# readelf工具来查看具体的程序信息
readelf -a main.elf

4.运行(arm64上运行)

#执行主机编译的arm64平台程序./main.elf

声明:资源可能存在第三方来源,若有侵权请联系删除!

http://www.xdnf.cn/news/313849.html

相关文章:

  • Pandas 的透视与逆透视
  • Marin说PCB之POC电路layout设计仿真案例---08
  • 内存分配的区域
  • Python 10天冲刺 《元编程(Meta-programming)》
  • 生态学领域期刊推荐
  • 26.2Linux中SPI的驱动实验(编程)_csdn
  • SUPER-VLAN基础配置
  • 社区、工地、停车场…视频桩如何实现“全场景适配”?
  • 项目三 - 任务3:学生多态方式喂养宠物
  • 卡特兰数--
  • 高等数学第五章---定积分(§5.2微积分基本定理)
  • 通过Config批量注入对象到Spring IoC容器
  • 开源免费视频在线提取工具 MediaGo 介绍
  • 浅析MySQL 的 **触发器(Trigger)** 和 **存储过程(Stored Procedure)原理及优化建议
  • 核函数(Kernel function)
  • GPS定位方案
  • 微机控制技术复习【一】
  • 汇总区间(简单)
  • AI 数字短视频数字人源码开发实用技巧分享​
  • HCIP【STP、RSTP、MSTP协议(详解)】
  • Linux中为某个进程临时指定tmp目录
  • Go语言——string、数组、切片以及map
  • 今年我国已发生三级以上地震318次
  • 从创业踩雷到依法解债:湖北理元理律师事务所的危机拆解逻辑
  • 继电器负载知识
  • 小刚说C语言刷题—1044 -找出最经济型的包装箱型号
  • win11 怎样把D盘空间分给C盘一点
  • day18-API(常见API,对象克隆)
  • 将nginx设置成自启动,防止每次开机后都要自己手动启动
  • nginx服务--基础