09-ARM开发板的HelloWorld

server/2024/11/14 11:51:54/

在ARM开发板上运行x86_64平台程序

前面在Ubuntu系统编译生成了X86_64平台的HelloWorld程序,通过NFS服务器,尝试在开发板上直接运行。

在这里插入图片描述

如图所示,程序无法正常运行,终端提示ARM开发板在执行x86架构(Intel或AMD)的hello程序时提示格式错误,原因是x86_64和ARM架构的程序不兼容,本质是由于这些CPU使用的指令集不同。

安装交叉编译工具链

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

前面就有提过交叉编译,为什么需要交叉编译,是因为通常编译工具链对编译环境有较高的要求,编译复杂的程序时,可能需要巨大的存储空间以及强大的CPU运算能力加快编译速度。常见的ARM架构平台资源有限,无论是存储空间还是CPU运算能力,都与X86平台相去甚远。

交叉编译器:能进行架构“交叉”编译过程的编译器。

安装ARM-GCC

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

  • 直接在Ubuntu下使用APT包管理工具下载安装,操作简单(本篇文章使用)
  • 自行下载第三方制作好的工具链,如Linaro,好处是选择丰富,能找到很多不同的版本。
  • 使用crosstool-ng根据需要自己制作,过程复杂不推荐。

安装命令

sudo apt install gcc-arm-linux-gnueabihf# 安装完毕后使用如下命令查看版本
arm-linux-gnueabihf-gcc–v
交叉编译helloworld程序

主机安装好交叉编译工具器后,执行如下命令对helloworld程序进行交叉编译:

arm-linux-gnueabihf-gcc hello.c -o hello# 使用如下命令查看交叉编译器生成的hello程序
readelf -a hello

在这里插入图片描述
从上图可以看到hello程序的系统架构为ARM平台,可以尝试通过NFS在开发板上运行。

如果不能运行,而且提示glibc版本问题,很可能是因为系统版本问题。(本人之前用的Ubuntu22.04交叉编译出来的程序在开发板上提示gblic版本不对应,程序运行不了,除了想到能静态编译想不到其他方法,后面换了Ubuntu18.04之后交叉编译又能运行了)


http://www.ppmy.cn/server/2007.html

相关文章

揭秘1688选品高阶玩法,90%的人都没注意到(上篇)

1688作为是国内最大的B2B批发平台,是众多商家选品进货的重要渠道。可能大部分人都还在1688面对茫茫商品慢慢选品,但是已经有一部分商家已经跳上另一个选品层面,选品效率直线提升,甚至还不想人知道,想自己偷偷用呢。今天…

采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示

一、系统简介 云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序,可协助区域内所有临床实验室相互协调并完成日常检验工作,对区域内的检验数据进行集中管理和共享,通过对质量控制的管理,最终实现区域内检验结果互认。其目…

C语言 | Leetcode C语言题解之第25题K个一组翻转链表

题目: 题解: /* 定义保存两个地址的结构体* 用来保存反转后结果的头节点和尾节点*/ typedef struct {struct ListNode* head; struct ListNode* tail; } TwoAddress; // 反转中间链表 TwoAddress* reverse(struct ListNode* head){struct ListNode* pr…

nVisual在线网络规划设计软件

●01● nVisual在线网络规划设计软件 在信息化快速发展的今天,网络基础设施的建设与优化变得尤为关键。为了满足现代通信行业对高效、精准的网络规划需求,nVisual在线网络规划设计软件应运而生,它通过集成先进的GIS技术和网络规划工具&#…

Android开发——ListView

activity_main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_height"match_parent"android:layout_width"match_parent"…

C# 窗体应用程序 Chart控件显示实时曲线

IDE: VS2019 项目模板&#xff1a;C# windows 窗体应用(.NET Framework) 【参考】 B站上教程C#Chart控件画折线图的使用&#xff0c;关于Chart控件的属性&#xff0c;介绍得非常详细。B站上教程C#上位机Chart控件实时曲线终极讲解&#xff0c;对鼠标滚轮事件等&#xff0c;多…

Leetcode-69.x的平方根

题目描述 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 注意&#xff1a;不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0.5 。 示例 …

数据库-Redis(17)

目录 81.什么是Redis Cluster&#xff1f; 82.说说Redis哈希槽的概念&#xff1f;为什么是16384个&#xff1f; 83.Redis集群会有写操作丢失吗&#xff1f;为什么&#xff1f; 84.Redis客户端有哪些&#xff1f; 85.Redis如何做大数据量插入&#xff1f; 81.什么是Redis C…