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月前
|
Linux
Linux交叉编译+粤嵌LCD实现三色图
Linux交叉编译+粤嵌LCD实现三色图
41 0
|
21天前
|
Java Linux Shell
Linux后台运行jar程序
【7月更文挑战第23天】
|
25天前
|
Linux C# iOS开发
如何用 WinDbg 调试Linux上的 .NET程序
【7月更文挑战第13天】 1. `dotnet-dump`: Collects process dumps with `dotnet-dump collect -p &lt;process_id&gt;`. 2. `lldb`: Debugs Mono runtime apps on macOS/Linux. 3. **Visual Studio Code**: Remotely debugs .NET via the C# extension. 4. **JetBrains Rider**: Supports remote debugging of .NET on Linux.
|
5天前
|
Oracle Java 关系型数据库
简单记录在Linux上安装JDK环境的步骤,以及解决运行Java程序时出现Error Could not find or load main class XXX问题
本文记录了在Linux系统上安装JDK环境的步骤,并提供了解决运行Java程序时出现的"Error Could not find or load main class XXX"问题的方案,主要是通过重新配置和刷新JDK环境变量来解决。
16 0
|
1月前
|
安全 小程序 Linux
Linux中信号是什么?Ctrl + c后到底为什么会中断程序?
信号在进程的学习中是一个非常好用的存在,它是软件层次上对中断机制的一种模拟,是异步通信方式,同时也可以用来检测用户空间到底发生了什么情况,然后系统知道后就可以做出相应的对策。
|
2月前
|
Linux 程序员 芯片
【Linux驱动】普通字符设备驱动程序框架
【Linux驱动】普通字符设备驱动程序框架
|
2月前
|
Linux Shell C语言
Linux进程控制——Linux进程程序替换
Linux进程控制——Linux进程程序替换
26 2
|
1月前
|
运维 监控 大数据
部署-Linux01,后端开发,运维开发,大数据开发,测试开发,后端软件,大数据系统,运维监控,测试程序,网页服务都要在Linux中进行部署
部署-Linux01,后端开发,运维开发,大数据开发,测试开发,后端软件,大数据系统,运维监控,测试程序,网页服务都要在Linux中进行部署
|
2月前
|
Linux 芯片
Linux 驱动开发基础知识——查询方式的按键驱动程序_编写框架(十三)
Linux 驱动开发基础知识——查询方式的按键驱动程序_编写框架(十三)
27 2
|
2月前
|
缓存 Linux 编译器
技术笔记:Linux程序包管理
技术笔记:Linux程序包管理