第2章嵌入式linux开发基础

上传人:今*** 文档编号:109983619 上传时间:2019-10-28 格式:PPT 页数:110 大小:1.45MB
返回 下载 相关 举报
第2章嵌入式linux开发基础_第1页
第1页 / 共110页
第2章嵌入式linux开发基础_第2页
第2页 / 共110页
第2章嵌入式linux开发基础_第3页
第3页 / 共110页
第2章嵌入式linux开发基础_第4页
第4页 / 共110页
第2章嵌入式linux开发基础_第5页
第5页 / 共110页
点击查看更多>>
资源描述

《第2章嵌入式linux开发基础》由会员分享,可在线阅读,更多相关《第2章嵌入式linux开发基础(110页珍藏版)》请在金锄头文库上搜索。

1、第 2 章 嵌入式Linux开发基础,目 录,Linux程序的编译和交叉编译,1,嵌入式Linux动态库和静态库的制作与应用,2,Makefile 基础和应用,3,嵌入式Linux远程调试,4,嵌入式Liunx多线程应用程序设计,5,嵌入式Linux下C和汇编的混合编程,6,嵌入式Linux socket网络编程基础,7,2. 1 Linux程序的编译和交叉编译,1. gcc编译器简介,2. gcc的执行过程,3. gcc的基本用法和选项,4. gcc的错误类型分析,2.1.1 gcc编译器简介,在linux下最为常用的C编译器就是gcc。gcc是GUN Compiler Collection

2、的简称,是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一,成为Linux平台编译器的事实标准。同时,在Linux平台下的嵌入式开发领域,gcc也是用得最普遍的一种编译器。gcc之所以被广泛采用,是因为它能支持各种不同的目标体系结构。 gcc编译器能将C、C+语言源程序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。而gcc则通过后缀来区别输入文件的类别。,2.1.2 gcc的执行过程,预处理 编译 汇编 连接,cpp cc1

3、as ld,2.1.3 gcc的基本用法和选项,gcc的基本用法 gcc options filenames 2. gcc的常用选项 -c -o output_filename -g -O -O2 -Idirname -Ldirname -lname -Wall -shared -static,2.1.3 gcc的基本用法和选项,gcc编译实例: 1编译单个源文件 gcc -o hello hello.c 2编译多个源文件 gcc -o message message.c main.c 3使用外部函数库 gcc -o trig -lm trig.c,2.1.4 gcc的错误类型分析,1C语法错

4、误 2头文件错误 3档案库错误 4未定义符号,2.2 嵌入式Linux动态库和静态库的制作与应用,Linux静态库和动态库,1,静态库的制作和应用,2,动态库的制作和应用,3,2.2.1 Linux静态库和动态库,Linux函数库分为静态库和动态库两种。 1静态函数库 这类库的名字一般是libxxx.a,其中xxx表示库的名称。例如:静态库名为message,则静态库文件名就是libmessage.a。利用静态函数库编译成的文件比较大,因为整个静态库在程序编译时会被连接到目标代码中,它的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会

5、成为它的缺点,因为如果静态函数库改变了,那么程序必须重新编译。 动态函数库 这类库的名字一般是libxxx.so,其中xxx表示库的名称。相对于静态函数库,动态函数库在编译的时候并没有被编译进目标代码中,程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被编译进执行程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的动态库。动态函数库的改变并不影响程序,所以动态函数库的升级比较方便。 Linux系统有几个重要的目录存放相应的函数库,如/lib、/usr/lib。,2.2.1 Linux静态库和动态库,演示代码: messa

6、ge.c: #include void goodbye_world(void) printf(“Goodbye, world!n“); main.c: #include void goodbye_world(void); int main(int argc, char *argv) goodbye_world(); return 0; ,2.2.2 静态库的制作和应用,1将message.c编译成 .o文件 rootvm-dev message# gcc -c message.c 2由.o文件创建静态库 rootvm-dev message# ar -rc libmessage.a messa

7、ge.o rootvm-dev message# ls libmessage.a main.c message.c message.o 3在程序中使用静态库 rootvm-dev message# gcc -o message -L. main.c -lmessage rootvm-dev message# ls libmessage.a main.c message message.c message.o rootvm-dev message# ./message Goodbye, world!,2.2.3 动态库的制作和应用,1将message.c编译成 .o文件 rootvm-dev m

8、essage# gcc -c -fpic message.c 2由.o文件创建动态库 rootvm-dev message# gcc -shared -o libmessage.so message.o rootvm-dev message# ls libmessage.so main.c message.c message.o 3在程序中使用动态库 rootvm-dev message# gcc -L. -lmessage main.c -o message rootvm-dev message# ls libmessage.so main.c message message.c messa

9、ge.o rootvm-dev message# ./message ./message: error while loading shared libraries: libmessage.so: cannot open shared object file: No such file or directory rootvm-dev message# cp libmessage.so /usr/lib/ rootvm-dev message# ./message Goodbye, world!,练习题,2.3 Makefile 基础和应用,Makefile 基本结构,1,Makefile 变量

10、,2,Makefile 规则,3,make 使用,4,2.3.1 Makefile 基本结构,默认的情况下,make命令会在当前目录下按顺序寻找文件名为“GNUmakefile”、“makefile”、“Makefile”的文件,找到了解 释这个文件。在这三个文件名中,最好使用“Makefile”这个文件名,因为,这个文件名第一个字符为大写,这样有一种显目的感觉。最好不要用 “GNUmakefile”,这个文件是GNU的make识别的。有另外一些make只对全小写的“makefile”文件名敏感,但是基本上来说,大多 数的make都支持“makefile”和“Makefile”这两种默认文件名

11、。 当然,可以使用别的文件名来书写Makefile,比如:“Make.Linux”,“Make.Solaris”,“Make.AIX”等,如果要指定特定的Makefile,可以使用make的“-f”和“-file”参数,如:make -f Make.Linux或make -file Make.AIX。,Makefile的文件名,1,2.3.1 Makefile 基本结构,Makefile结构和规则,2,一个 Makefile 中通常至少包含如下内容: 需要由 make 工具创建的目标体(target),目标体通常是目标文件、可执行文件或是一个标签; 要创建的目标体所依赖的文件(dependen

12、cy_file); 创建每个目标体时需要运行的命令(command)。,格式为: target: dependency_files command 要注意的是,command前面是一个“Tab”键符。,使用 make 的格式为: make target 这样 make 就会自动读入Makefile(也可以是首字母小写 makefile)执行对应 target 的 command 语句,并会找到相应的依赖文件,2.3.1 Makefile 基本结构,Makefile结构和规则,2,Makefile 例子:,edit : main.o kbd.o command.o display.o inser

13、t.o search.o files.o utils.o gcc -o edit main.o kbd.o command.o display.o insert.o search.o files.o utils.o main.o : main.c defs.h gcc -c main.c o main.o kbd.o : kbd.c defs.h command.h gcc -c kbd.c o kbd.o command.o : command.c defs.h command.h gcc -c command.c o command.o display.o : display.c defs

14、.h buffer.h gcc -c display.c o display.o insert.o : insert.c defs.h buffer.h gcc -c insert.c o insert.o search.o : search.c defs.h buffer.h gcc -c search.c o search.o files.o : files.c defs.h buffer.h command.h gcc -c files.c o files.o utils.o : utils.c defs.h gcc c utils.c o utils.o clean : rm edit

15、 main.o kbd.o command.o display.o insert.o search.o files.o utils.o,2.3.1 Makefile 基本结构,make的工作过程,3,1make会在当前目录下找名字叫“Makefile”或“makefile”的文件。2如果找到,它会查看该Makefile文件中是否包含了其它的Makefile文件或规则文件,并读入其它规则文件。 3在Makefile文件中查找第一个目标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件。 4如果edit文件不存在,或是edit所依赖的后面的 .o 文

16、件的文件修改时间要比edit这个文件新,那么,它就会执行后面所定义的命令来生成edit这个文件。 5如果edit所依赖的.o文件也存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。 6根据 .o 文件的依赖关系找到相应的.c文件和.h文件,并生成 .o 文件。 7当所有的 .o 文件都已经编译好后,make会根据它们最终编译生成可执行文件edit了。,练习题,有一个ARM目标机运行的项目,包括以下文件:,四个 .c 源程序如下:,#include extern volatile int baud; static int fd; ,tty.c:,#include #include #include #define CMD (0) ,keyshell.c

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号