Linux交叉编译hello程序

简介: Linux交叉编译hello程序

前言

相信大家对于Hello程序都很熟悉,大家学习C语言第一个开始学习的程序就是Hello world,但是我今天要讲的是在嵌入式Linux程序下的hello程序。

一、嵌入式Linux下的hello程序

代码:

#include <stdio.h>
 /* 执行命令: ./hello world
  * argc = 2
  * argv[0] = ./hello
  * argv[1] = world
  */
 int main(int argc, char **argv)
 {
      if (argc >= 2)
              printf("Hello, %s!\n", argv[1]);
      else
              printf("Hello, world!\n");
      return 0;
 }

在C语言里面main函数一般都不带有参数,但是在嵌入式Linux中main函数常带参数,参数的作用具体是什么呢下面讲给大家讲解。


二、main函数参数作用

argc:这个参数代表你执行程序时传递的参数有多少个,比如执行命令: ./hello world。

./hello是一个参数,world又是一个参数。所以此时argc就是2。


argv:这个参数就是一个二级指针,他就指向传递的参数。

argv[0]代表./hello

argv[1]代表world


三、交叉编译hello程序

在Ubantu下编译Hello程序

直接执行gcc命令即可编译程序,使用./hello即执行程序。

3c4be8ff97ce4f338ae39083bb67d943.png

将hello程序挂载到开发板

1.生成可执行文件

在x86和x64编译环境下直接使用gcc命令即可编译程序,但是这些程序无法在板子上运行。

使用file命令查看hello程序文件类型:

91ae19dca1a142749572f478bb2bff84.png

通过file命令我们可以得知直接用gcc命令生成的可执行文件是无法在板子上面运行的。

所以我们需要使用下面的命令:

c2e88ddc419a453f8d390dc8bc84833b.png

file命令查看文件类型:

74815552c19746d698aa2b6ea45dc1f3.png

通过file命令我们得知此文件类型是ARM类型的可以直接在板子上去运行的。

2.执行cp指令将hello程序挂载到网络文件系统

818337af9c11454d9553006eef011e68.png

3.挂载ubantu

串口下执行mount -t nfs -onolock,vers=3192.168.5.11:/home/book/nfs_rootfs /mnt命令

4.拷贝可执行文件到串口

5.执行代码


总结

大家一直都认为hello程序是一个非常简单的程序,但是在Linux下的hello程序却包含了很多知识点。


相关文章
|
2天前
|
Ubuntu Linux 编译器
linux下交叉编译licensecc
通过本文的步骤,您可以在Linux环境下成功交叉编译LicenseCC。本文详细介绍了环境准备、工具链安装、源代码下载、CMake配置、编译和验证的全过程。希望这些内容对您的学习和工作有所帮助。
14 4
|
5月前
|
安全 Linux Shell
Linux上执行内存中的脚本和程序
【9月更文挑战第3天】在 Linux 系统中,可以通过多种方式执行内存中的脚本和程序:一是使用 `eval` 命令直接执行内存中的脚本内容;二是利用管道将脚本内容传递给 `bash` 解释器执行;三是将编译好的程序复制到 `/dev/shm` 并执行。这些方法虽便捷,但也需谨慎操作以避免安全风险。
267 6
|
6月前
|
网络协议 Linux
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
795 2
|
6月前
|
Linux Python
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
113 2
|
8月前
|
Linux
Linux交叉编译+粤嵌LCD实现三色图
Linux交叉编译+粤嵌LCD实现三色图
|
4月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
158 1
|
5月前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
65 5
|
6月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
252 3
|
6月前
|
网络协议 Linux Shell
在Linux中,如何通过一个端口找到程序?
在Linux中,如何通过一个端口找到程序?
|
6月前
|
Linux API
在Linux中,程序产生了库日志虽然删除了,但磁盘空间未更新是什么原因?
在Linux中,程序产生了库日志虽然删除了,但磁盘空间未更新是什么原因?