【嵌入式智能产品开发实战】(十二)—— 政安晨:通过ARM-Linux掌握基本技能【C语言程序的安装运行】

 目录

程序的安装

 程序安装的本质

在Linux下制作软件安装包


政安晨的个人主页政安晨

欢迎 👍点赞✍评论⭐收藏

收录专栏: 嵌入式智能产品开发实战

希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正!

在ARM-Linux系统中,C语言程序的安装和运行可以按照以下步骤进行

  1. 准备交叉编译工具链:由于ARM-Linux系统的体系结构和常规x86体系结构有所不同,我们需要使用特定的交叉编译工具链来编译ARM架构的C语言程序。可以在官方网站或者第三方开发者社区下载合适的交叉编译工具链。

  2. 编写C语言程序:使用文本编辑器编写C语言程序源代码,并保存为以.c为后缀的文件。

     3.使用交叉编译工具链编译程序:打开终端,并使用交叉编译工具链中的编译器(一般为arm-linux-gcc)将C语言程序源代码编译成可执行文件。

例如,使用以下命令编译程序:

arm-linux-gcc -o program program.c

这将会生成名为program的可执行文件。

        4.将可执行文件传输到ARM-Linux系统:将生成的可执行文件传输到运行ARM-Linux系统的设备上,可以使用文件传输工具(如scp)或者通过网络进行传输。

        5. 在ARM-Linux系统中运行程序:使用命令行终端进入到可执行文件所在的目录,并使用以下命令运行程序:

./program

C语言程序就会在ARM-Linux系统上运行,并输出相应的结果。

需要注意的是ARM-Linux系统中的C语言程序可能需要特定的库文件或者其他依赖项,如果程序无法正常运行,可能需要安装相应的库文件或者解决依赖关系。


程序的安装

程序的运行过程,其实就是处理器根据PC寄存器中的地址,从内存中不断取指令、翻译指令和执行指令的过程。

内存RAM的优点是支持随机读写,因此可以支持CPU随机读取指令;

内存的缺陷是RAM属于易失性存储器,一旦断电,内存中原先保存的数据都会消失。

现代计算机的存储系统一般采用ROM+RAM的组合形式ROM中存储的数据断电后不会消失,常用来保存程序的指令和数据,但ROM不支持随机存取,因此程序运行时,会首先将指令和数据从ROM加载到RAM,然后CPU到RAM中取指令就可以了。

 程序安装的本质

软件安装的过程其实就是将一个可执行文件安装到ROM的过程。

你下载的软件安装包里包含了可以在计算机上运行的可执行文件,软件开发者为了方便用户使用,将可执行文件、程序运行时需要的动态共享库、安装使用文档等打包压缩,生成可运行的自解压安装包格式。

使用安装包安装软件就是将包中的可执行文件解压出来,然后将可执行文件和动态共享库复制到指定的安装目录,并把这些安装信息告诉操作系统。

当用户要运行这个软件时,操作系统就会从安装目录找到这个可执行文件,把它加载到内存执行。无论是在Linux环境还是在Windows环境,基本上都是遵循这个套路,只不过实现的方式不同而已。

在Linux环境下,我们一般将可执行文件直接复制到系统的官方路径/bin、/sbin、/usr/bin下,程序运行时直接从这些系统默认的路径下去查找可执行文件,将其加载到内存运行。

接下来我们就做一个实验,分别在Linux和Windows环境下制作一个软件安装包,并分别安装运行。这个软件很简单,就是一个helloworld程序。

第一次看到这里的小伙伴,请参考这篇文章安装编译环境:

【嵌入式机器学习开发实战】(八)—— 政安晨:通过ARM-Linux掌握基本技能【C语言程序的编译过程】icon-default.png?t=N7T8https://blog.csdn.net/snowdenkeke/article/details/136805174比如

sudo apt install gcc-arm-linux-gnueabihfsudo apt install vim

现在我们准备一个简单的C语言Hello world程序(我们就将文件命名为main.c):

#include <stdio.h>int main(void)
{printf("hello world!\n");return 0;
}

在ARM-Linux环境下,我们可以使用gcc命令将其编译为一个可执行文件:a.out。完成这一步后,我们就可以给这个可执行文件制作软件安装包。

在ARM-Linux目标机上(我这里就是用的树莓派开发板),创建一个文件夹,并编译出可执行文件。

编译:

arm-linux-gnueabihf-gcc -o hello.out main.c

值得注意的是,我这里使用的是服务器版本,已经安装了gcc,所以我的执行如下:

可以看到第二行中打印出了hello world!

此时,验证可以后,咱们就可以在ARM-Linux环境下制作软件安装包了。

在Linux下制作软件安装包

Linux操作系统一般可分为两派:Redhat系和Debian系。Redhat系使用RPM包管理机制,而Debian系,像Debian、Ubuntu等操作系统则使用deb包管理机制。

我们在Linux环境下安装软件其实就是将可执行文件复制到环境变量PATH对应的官方路径下面:

常用的路径有/bin、/sbin、/usr/bin、/usr/local/bin等。

当我们在Shell终端输入命令时,Shell就会到这些默认路径下去找与该命令相对应的二进制文件,并加载到内存执行。

一个成熟的发布软件里,除了可执行文件,一般还会有配套的文档说明、图标等,程序开发者将这些文档一起打包发布,提供自动安装的功能,更方便用户下载和安装。在制作deb包时,除了可执行文件,还需要一些控制信息来描述这个安装包,如软件的版本、作者、安装包要安装的路径等,这些控制信息放在一个叫作control的文件里。

下面我们就写一个简单的helloworld程序,并为它制作一个deb包。

编译获得可执行文件后(.out),我这里没有使用后缀(不是必须的),我这里的文件名为hello:

创建一个hello同名目录,然后进入该目录,分别创建DEBIAN、usr/local/bin/目录,并在DEBIAN目录下创建control文件,将可执行文件helloworld复制到usr/local/bin/目录下,操作完成后helloworld的目录结构如下所示。

DEBIAN目录下的control文件用来记录helloworld安装包的安装信息,我们可以通过编辑这个文件来配置相关安装信息。

package:hello
version:1.0
architecture:i386
maintainer:wit
description: deb package demo

另外一个目录usr/local/bin/表示deb包的默认安装路径。

这两个文件归位后,我们就可以使用dpkg命令来制作安装包。

 dpkg -b hello/ hello_1.9_i386.deb

如果命令运行无误,就会在hello的同级目录下,生成一个名为hello_1.0_i386.deb的安装包。

接下来我们使用dpkg命令安装这个deb包,来验证一下我们制作的安装包是否正常。

安装如下

dpkg -i hello_1.9_i386.deb

安装成功后:在系统的/usr/local/bin下就会看到安装成功的hello可执行文件。

安装成功后,在Shell终端的任何目录下,直接输入hello命令都可以直接运行。当然,也可以通过dpkg命令卸载hello程序。


这就是您要知道的全部内容了,先了解即可。这些知识仅仅是为咱们后续真正的嵌入式机器学习体系的开发打些基础而已。

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

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

相关文章

在 Windows 11 上安装 MongoDB

MongoDB 是一个流行的 NoSQL 数据库&#xff0c;它提供了灵活的数据存储方案&#xff0c;而 MongoDB Compass 则是一个可视化管理工具&#xff0c;可以更轻松地与 MongoDB 数据库交互和管理。在本文中&#xff0c;我们将介绍如何在 Windows 11 上安装 MongoDB&#xff0c;并配置…

Dimitra:基于区块链、AI 等前沿技术重塑传统农业

根据 2023 年联合国粮食及农业组织&#xff08;FAO&#xff09;、国际农业发展基金&#xff08;IFAD&#xff09;等组织联合发布的《世界粮食安全和营养状况》报告显示&#xff0c;目前全球约有 7.35 亿饥饿人口&#xff0c;远高于 2019 年的 6.13 亿&#xff0c;这意味着农业仍…

C++教学——从入门到精通 6.ASCII码与字符型

如何把小写字母转换成大写字母呢&#xff1f; 这个问题问的好&#xff0c;首先我们要新学一个类型——char 这个类型就是字符型 再来说说ASCII码 给大家举几个例子 空格————32 0————48 9————57 A————65 Z————90 a————97 z————122 我们…

HarmonyOS 应用开发之线性容器

线性容器实现能按顺序访问的数据结构&#xff0c;其底层主要通过数组实现&#xff0c;包括ArrayList、Vector、List、LinkedList、Deque、Queue、Stack七种。 线性容器&#xff0c;充分考虑了数据访问的速度&#xff0c;运行时&#xff08;Runtime&#xff09;通过一条字节码指…

Django 仿博客园练习

数据库搭建 部分功能介绍 【一】注册 &#xff08;1&#xff09;效果显示、简单简介 主要亮点 结合了layui和forms组件默认头像可以随着性别的选择发生改变自定义头像可以实时更新显示forms组件报错信息可以局部刷新显示在对应框体下面 没有直接使用layui的前端验证后端验证…

C++教学——从入门到精通 5.单精度实数float

众所周知&#xff0c;三角形的面积公式是(底*高)/2 那就来做个三角形面积计算器吧 到吗如下 #include"bits/stdc.h" using namespace std; int main(){int a,b;cin>>a>>b;cout<<(a*b)/2; } 这不对呀&#xff0c;明明是7.5而他却是7&#xff0c;…

商城业务-检索服务

文章目录 前言一、搭建页面环境1.1 静态界面搭建1.2 Nginx 动静分离1.3 Windows 上传文件1.4 引入 thymeleaf 依赖1.5 Nginx 反向代理1.4 Nginx 配置1.5 gateway 网关配置 二、调整页面跳转2.1 引入依赖2.2 页面跳转 三、检索查询参数模型分析抽取3.1 检索业务分析3.2 检索语句…

【上海大学计算机组成原理实验报告】二、数据传送实验

一、实验目的 了解在模型机中算术、逻辑运算单元的控制方法。学习机器语言程序的运行过程。通过人工译码&#xff0c;加深对译码器基本工作原理的理解。 二、实验原理 根据实验指导书的相关内容&#xff0c;本次实验所要用的CP226实验仪在手动方式下&#xff0c;运算功能通过…

记录何凯明在MIT的第一堂课:神经网络发展史

https://www.youtube.com/watch?vZ5qJ9IxSuKo 目录 表征学习 主要特点&#xff1a; 方法和技术&#xff1a; LeNet 全连接层​ 主要特点&#xff1a; 主要特点&#xff1a; 网络结构&#xff1a; AlexNet 主要特点&#xff1a; 网络结构&#xff1a; Sigmoid Re…

碳素光线疗法与宠物健康

碳素光线与宠物健康 生息在地球上的所有动物、在自然太阳光奇妙的作用下、生长发育。太阳光的能量使它们不断进化、繁衍种族。现在、生物能够生存、全仰仗于太阳的光线。太阳光线中、包含有动物健康所需要的极为重要的波长。因此、和户外饲养的动物相比、在室内喂养的观赏动物、…

全套医院手术麻醉系统源码 人工智能麻醉系统源码 医疗管理系统源码

全套医院手术麻醉系统源码 人工智能麻醉系统源码 医疗管理系统源码 手术麻醉临床信息系统有着完善的临床业务功能&#xff0c;能够涵盖整个围术期的工作&#xff0c;能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施&#xff0c;能够规范麻醉科的工作流…

实现offsetof宏以及交换一个整数二进制奇偶位的宏

目录 1. offsetof宏2. 交换奇偶位 1. offsetof宏 我们想用宏来实现offsetof函数,首先要了解这个函数的用法。 1.1 offsetof函数的介绍及用法 &#xff08;1&#xff09;功能&#xff1a;用来计算结构体中一个成员在该结构体中的相对起始位置的偏移量&#xff0c;单位是字节。 …

ClamAV:Linux服务器杀毒扫描工具

Clam AntiVirus&#xff08;ClamAV&#xff09;是免费而且开放源代码的防毒软件&#xff0c;软件与病毒码的更新皆由社群免费发布。ClamAV在命令行下运行&#xff0c;它不将杀毒作为主要功能&#xff0c;默认只能查出系统内的病毒&#xff0c;但是无法清除。需要用户自行对病毒…

异常,Lambda表达式

文章目录 异常介绍存在形式程序中异常发生后的第一反应体系JVM的默认处理方案处理方式声明 throws概述格式抛出 throw格式注意意义 throws和throw的区别 捕获 try,catch介绍格式执行方式多异常捕获处理意义 如何选择用哪个 Throwable类介绍常用方法 自定义异常概述实现步骤范例…

手写Spring框架(上)浅出

手写Spring框架 准备工作Spring启动和扫描逻辑实现依赖注入的实现Aware回调模拟实现和初始化机制模拟实现BeanPostProcessor (Bean的后置处理器) 模拟实现Spring AOP 模拟实现 准备工作 准备一个空的工程创建spring的容器类&#xff0c;它是Spring IOC理念的实现&#xff0c;负…

Yolo 自制数据集dect训练改进

上一文请看 Yolo自制detect训练-CSDN博客 简介 如下图&#xff1a; 首先看一下每个图的含义 loss loss分为cls_loss, box_loss, obj_loss三部分。 cls_loss用于监督类别分类&#xff0c;计算锚框与对应的标定分类是否正确。 box_loss用于监督检测框的回归&#xff0c;预测框…

算法——距离计算

距离计算常用的算法包括欧氏距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、余弦相似度等。这些算法在数据挖掘、机器学习和模式识别等领域中被广泛应用。 1.欧氏距离 欧式距离也称欧几里得距离&#xff0c;是最常见的距离度量&#xff0c;衡量的是多维空间中两个点之间的…

SpringMvc项目创建过程

1、新建空项目 名字和路径自定义&#xff0c;Maven项目&#xff0c;不建议勾选Add sample code 2、创建web模块 选中当前项目 修改路径&#xff0c;注意是在main包下 选择当前项目 3、编写pom.xml文件 在文件中加入以下内容&#xff0c;packaging标签表明了maven打包类型。 &…

Mysql的高级语句3

目录 一、子查询 注意&#xff1a;子语句可以与主语句所查询的表相同&#xff0c;但是也可以是不同表。 1、select in 1.1 相同表查询 1.2 多表查询 2、not in 取反&#xff0c;就是将子查询结果&#xff0c;进行取反处理 3、insert into in 4、update…

【智能算法】黄金正弦算法(GSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2017年&#xff0c;Tanyildizi等人受到正弦函数单位圆内扫描启发&#xff0c;提出了黄金正弦算法&#xff08;Golden Sine Algorithm, GSA&#xff09;。 2.算法原理 2.1算法思想 GSA来源于正弦函…