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 请回答这几个问题
① 怎么确定交叉编译器中头文件的默认路径?
进入交叉编译器的目录里,执行: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 之间的关系
关于这三者之间的关系:请点击