嵌入式linux/鸿蒙开发板(IMX6ULL)开发(九)第一个程序背后的C语言知识

简介: 嵌入式linux/鸿蒙开发板(IMX6ULL)开发(九)第一个程序背后的C语言知识

1.HelloWorld背后没那么简单


这部分知识笼统的介绍一下。提出几个意识。其一,后期可能经常要用到C语言去编写应用程序,这一段意味着你要很熟悉C语言的编写规则以及背后的逻辑,比如指定头文件,库函数这些资源,在自己编写的时候,会在自己编写的时候使用这些资源。不了解的建议学习一下唐浩强的C语言。


1.1 交叉编译hello.c


使用GIT下载所有源码后,本节源码位于如下目录:

01_all_series_quickstart\
04_嵌入式Linux应用开发基础知识\source\01_hello


hello.c的源码如下:

01 #include <stdio.h>
02
03 /* 执行命令: ./hello weidongshan
04  * argc = 2
05  * argv[0] = ./hello
06  * argv[1] = weidongshan
07  */
08
09 int main(int argc, char **argv)
10 {
11      if (argc >= 2)
12              printf("Hello, %s!\n", argv[1]);
13      else
14              printf("Hello, world!\n");
15      return 0;
16 }
17


在Ubuntu中可以执行以下命令编译、执行:

$ gcc -o hello hello.c
$ ./hello
Hello, world!
$ ./hello weidongshan
Hello, weidongshan!


上述命令编译得到的可执行程序hello可以在Ubuntu中运行,但是如果把它放到ARM板子上去,它是无法执行的。因为它是使用gcc编译的,是给PC机编译的,里面的机器指令是x86的。

我们要想给ARM板编译出hello程序,需要使用交叉编译工具链,比如:

$ arm-linux-gnueabihf-gcc -o hello hello.c


这样编译出来的hello程序才可以在ARM板子上运行。


1.2 请回答这几个问题


1670851178769.jpg

① 怎么确定交叉编译器中头文件的默认路径?


进入交叉编译器的目录里,执行:find -name “stdio.h”,它位于一个“include”目录下的根目录里。

这个“include”目录,就是要找的路径。


② 怎么自己指定头文件目录?


编译时,加上“-I <头文件目录>”这样的选项。


③ 怎么确定交叉编译器中库文件的默认路径?


进入交叉编译器的目录里,执行:find -name lib,可以得到xxxx/lib、xxxx/usr/lib,一般来说这2个目录就是要找的路径。

如果有很多类似的lib,进去看看,有很多so文件的目录一般就是要找的路径。


④ 怎么自己指定库文件目录、指定要用的库文件?


编译时,加上“-L <库文件目录>”这样的选项,用来指定库目录;

编译时,加上“-labc”这样的选项,用来指定库文件libabc.so。


1.3 u-boot kenerl rootfs 之间的关系


关于这三者之间的关系:请点击

相关文章
|
1天前
|
API 数据安全/隐私保护 UED
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
在掌握了鸿蒙系统的开发基础后,我挑战了蓝牙功能的开发。通过Bluetooth A2DP和Access API,实现了蓝牙音频流传输、设备连接和权限管理。具体步骤包括:理解API作用、配置环境与权限、扫描并连接设备、实现音频流控制及动态切换设备。最终,我构建了一个简单的蓝牙音频播放器,具备设备扫描、连接、音频播放与停止、切换输出设备等功能。这次开发让我对蓝牙技术有了更深的理解,也为未来的复杂项目打下了坚实的基础。
77 58
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
|
2天前
【HarmonyOS Next开发】:ListItemGroup使用
通过使用ListItemGroup和AlphabetIndexer两种类型组件,实现带标题分类和右侧导航栏的页面
83 61
|
2天前
|
开发者
【HarmonyOS Next开发】用户文件访问
文件所有者为登录到该终端设备的用户,包括用户私有的图片、视频、音频、文档等。 应用对用户文件的创建、访问、删除等行为,需要提前获取用户授权,或由用户操作完成。
22 10
|
2天前
|
存储 JSON 测试技术
【HarmonyOS Next开发】云开发-云数据库(二)
实现了云侧和端侧的云数据库创建、更新、修改等操作。这篇文章实现调用云函数对云数据库进行增删改查。
20 9
|
2天前
|
API 容器
【HarmonyOS Next开发】Navigation使用
Navigation是路由容器组件,包括单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式。适用于模块内和跨模块的路由切换。 在页面跳转时,应该使用页面路由router,在页面内的页面跳转时,建议使用Navigation达到更好的转场动效场景。
32 8
|
2天前
|
API
【HarmonyOS Next开发】Tabs使用封装
在写Tabs时,会使用很多个TabContent来实现不同页面的展示内容,但是如果TabContent数量很多时,会导致Tabs代码量大而且很臃肿,因此想着尝试去封装Tabs的使用,可以让界面整洁和对内容界面的解耦。 主要依托于wrapBuilder:封装全局@Builder的方法使用。需要注意从API 11 才开始支持使用
18 6
|
2天前
|
存储 IDE JavaScript
【HarmonyOS Next开发】端云一体化初始化项目
端云一体化开发是HarmonyOS对云端开发的支持、实现端云联动。云开发服务提供了云函数、云数据库、云存储等服务,可以使开发者专注于应用的业务逻辑开发,无需关注基础设施,例如:服务器、操作系统等问题。
21 6
|
2天前
|
索引
【HarmonyOS Next开发】日历组件详细日界面组件
原生UI没有提供日历相关的组件,于是手撸了详细页面的日程。一开始打算使用list加tab的方式来实现切换的效果,但是list的切换是没有办法确定当前展示的索引的,所以没有办法实现日历内容动态添加等效果。在业内大佬的指导下,使用了两个swiper组件分别实现周和日的切换,实现了想要的效果
16 6
|
2天前
【HarmonyOS Next开发】实现矩形上下拖动、动态拖拽修改高度
实现一个矩形块上下拖动,并且可以拖动边缘定位点改变矩形块高度。
16 6