【嵌入式智能产品开发实战】(十二)—— 政安晨:通过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.mzph.cn/news/784805.shtml

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

相关文章

MybatisPlus速成

MybatisPlus快速入门 快速入门入门案例常见注解常见配置 核心功能条件构造器自定义SQLService接口 扩展功能代码生成静态工具逻辑删除枚举处理器JSON处理器 插件功能分页插件通用分页实体 参考文档 mybatis-plus参考文档 全部资料链接 讲义 快速入门 入门案例 <dependency…

骑行不将就,坐垫要讲究!跟维乐来一场骑美合一的美学旅行~

想象一下&#xff0c;你胯下的坐垫不再是冷冰冰的硬疙瘩&#xff0c;而是化身为“骑行界的舒适艺术家”。美学坐垫宛如马鞍上的微型沙发&#xff0c;采用美学与人体工学的跨界联姻&#xff0c;不仅赏心悦目&#xff0c;更能温柔拥抱你的臀部。它那精妙的曲线设计&#xff0c;仿…

AI大模型在金融行业的应用场景和落地路径

作者&#xff1a;林建明 来源&#xff1a;IT阅读排行榜 本文摘编自《AIGC重塑金融&#xff1a;AI大模型驱动的金融变革与实践》&#xff0c;机械工业出版社出版这是最好的时代&#xff0c;也是最坏的时代。尽管大模型技术在金融领域具有巨大的应用潜力&#xff0c;但其应用也面…

基于两个单片机串行通信的电子密码锁设计

1.功能 电子号码锁在实际应用中应该有两部分&#xff0c;一部分在外部&#xff0c;有键盘部分和密码显示&#xff1b;另一部分内部&#xff0c;设置密码、显示密码。使用单片机自身带有的串口可以很方便的实现单片机之间的通信&#xff0c;使输入的密码值传送到主机检验是否是…

ctf题目

目录 1.文件包含的一道题目&#xff0c;没什么难度&#xff0c; 2.一道sql注入的题目&#xff0c;伪静态 3.限制只能本地访问。 1.文件包含的一道题目&#xff0c;没什么难度&#xff0c; 但是一个点就是它这里去包含的那个文件名就是flag&#xff0c;而不是flag.php也不是f…

数据库---------完全备份和增量备份的数据恢复,以及断点恢复

目录 一、在数据库表中&#xff0c;分三次录入学生考试成绩 1.1先创建库&#xff0c;创建表&#xff0c;完成三次数据的录入 1.2首次录入成绩后&#xff0c;做该表的完全备份 1.3第二次插入后 做增量备份 1.4第三次插入后 做增量备份 二、模拟数据丢失&#xff0c;并使用…

小练习——java中循环语句打印乘法口诀表

正向乘法表 for (int i 1; i<9; i) {for (int j 1; j < i; j) {System.out.print(j "X" i "" (i * j) "\t");}System.out.println();}代码结果&#xff1a; 打印反向乘法表 for (int i 9; i > 1; i--) {for (int j 1; j <…

大数据技术之 Apache Doris(一)

第 1 章 Doris 简介 1.1 Doris 概述 Apache Doris 由百度大数据部研发&#xff08;之前叫百度 Palo&#xff0c;2018 年贡献到 Apache 社区后&#xff0c;更名为 Doris &#xff09;&#xff0c;在百度内部&#xff0c;有超过 200 个产品线在使用&#xff0c;部署机器超过 10…

机器学习周报第35期

目录 一、文献阅读&#xff1a;You Only Look Once: Unified, Real-Time Object Detection1.1 摘要1.2 背景1.3 论文模型1.4 网络设计1.5 YOLO的局限性1.6 实现代码 target 7*7*30 值域为0-1 一、文献阅读&#xff1a;You Only Look Once: Unified, Real-Time Object Detection…

从0开始搭建基于VUE的前端项目(三) Vuex的使用与配置

准备与版本 vuex 3.6.2(https://v3.vuex.vuejs.org/zh/)概念 vuex是什么? 是用作 【状态管理】的 流程图如下 state 数据状态,成员是个对象 mapState 组件使用this.$store.state.xxx获取state里面的数据 getters 成员是个函数,方便获取state里面的数据,也可以加工数据 ma…

LC 106.从中序与后序遍历序列构造二叉树

106. 从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a; inorder [9,3,15,20,7], post…

个人主页导航源码

源码简介 个人主页导航源码&#xff0c;个人主页导航源码&#xff0c;一款带后台的个人导航主页源码。 搭建环境 PHP 5.2 Nginx Mysql5.6 安装教程 1.上传源码压缩包到网站目录并解压 2.访问网站域名安装提示进行安装即可 后台路径为&#xff1a;https://域名/admin/ …

ngrok 内网穿透使用

title: ngrok 内网穿透使用 search: 2024-02-29 文章目录 背景Windows安装ngrok指令授权ngrok个人用户Authtoken穿透 http 或 https 服务ngrok的代理http指令ngrok获得静态域名指令ngrok的代理ssh指令 背景 这次寒假回家&#xff0c;很无奈&#xff0c;很多东西放在项目组服务…

Vue2(十一):脚手架配置代理、github案例、插槽

一、脚手架配置代理 1.回顾常用的ajax发送方式&#xff1a; &#xff08;1&#xff09;xhr 比较麻烦&#xff0c;不常用 &#xff08;2&#xff09;jQuery 核心是封装dom操作&#xff0c;所以也不常用 &#xff08;3&#xff09;axios 优势&#xff1a;体积小、是promis…

微软Azure推出9种逼真AI语音服务;OpenAI有限开放Voice Engine访问权限

&#x1f680; 微软Azure推出9种逼真AI语音服务 摘要&#xff1a;微软Azure团队在2023年9月对外宣布&#xff0c;针对商业客户推出了一系列逼真的AI语音服务。最近&#xff0c;该公司进一步表示&#xff0c;这些服务现已包含9种更为真实的人工智能声音&#xff0c;并且已于所有…

PostgreSQL:所有支持的数据类型及建表语句实例

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 一、引言 在当今这个数据驱动的时代&#xff0c;数据库已经成为了企业和个人不可或缺的工具。而在众多数据库产品中&#xff0c;PostgreSQL以其强大的功能和高度的可扩展性&#xff0c;受到了越来越多开发者的青睐。…

ZC706+AD9361 运行 open WiFi

先到github上下载img&#xff0c;网页链接如下&#xff1a; https://github.com/open-sdr/openwifi?tabreadme-ov-file 用win32 Disk lmager 把文件写入到SD卡中&#xff0c;这一步操作会把SD卡重新清空&#xff0c;注意保存数据。这个软件我会放在最后的网盘链接中 打开linu…

对接中泰极速行情 | DolphinDB XTP 插件使用教程

XTP 是中泰证券推出的高性能交易平台&#xff0c;专为专业投资者提供高速行情及交易系统&#xff0c;旨在提供优质便捷的市场接入通道。目前支持股票、基金、ETF、债券、期权等多个市场&#xff0c;可满足不同投资者需求。 基于 XTP 官方 C SDK&#xff0c;DolphinDB 开发了 X…

使用hping3网络工具构造TCP/IP数据包和进行DDos攻击

1 概述 hping3是一个强大的命令行工具&#xff0c;用于生成、发送和解析TCP/IP协议的数据包。它是开源的网络安全工具&#xff0c;由Salvatore Sanfilippo开发&#xff0c;主要应用于网络审计、安全测试和故障排查等领域。hping3不仅可以作为普通的网络连通性检测工具&#xf…

【蓝桥杯第十三届省赛B】(部分详解)

九进制转十进制 #include <iostream> #include<math.h> using namespace std; int main() {cout << 2*pow(9,3)0*pow(9,2)2*pow(9,1)2*pow(9,0) << endl;return 0; }顺子日期 #include <iostream> using namespace std; int main() {// 请在此…