嵌入式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 之间的关系


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

相关文章
|
4天前
|
Linux 开发工具 C语言
Linux 安装 gcc 编译运行 C程序
Linux 安装 gcc 编译运行 C程序
23 0
|
存储 编译器
Linux--程序地址空间
Linux--程序地址空间
|
16天前
|
存储 编译器 C语言
嵌入式C语言(六)
嵌入式C语言(六)
20 0
|
1月前
|
存储 Linux C语言
Linux系统下C语言的文件操作
Linux系统下C语言的文件操作
19 0
|
3天前
|
Java Shell Linux
【linux进程控制(三)】进程程序替换--如何自己实现一个bash解释器?
【linux进程控制(三)】进程程序替换--如何自己实现一个bash解释器?
|
25天前
|
小程序 Linux API
Linux用C语言模拟‘ls‘命令
Linux用C语言模拟‘ls‘命令
11 1
|
25天前
|
Linux 测试技术 C语言
【Linux】应用编程之C语言文件操作
【Linux】应用编程之C语言文件操作
|
1月前
|
Shell Linux C语言
【Shell 命令集合 系统设置 内置命令】⭐⭐Linux 测量程序的执行时间和资源使用情况 time命令 使用指南
【Shell 命令集合 系统设置 内置命令】⭐⭐Linux 测量程序的执行时间和资源使用情况 time命令 使用指南
33 0
|
1月前
|
前端开发 Unix Linux
Linux indent命令 (格式化C语言源代码的程序)
Linux indent命令 (格式化C语言源代码的程序)
18 0
Linux indent命令 (格式化C语言源代码的程序)
|
1月前
|
存储 缓存 安全
掌握Linux字符设备驱动程序的核心要点
掌握Linux字符设备驱动程序的核心要点
59 0