嵌入式Linux (九)

姓名:杨乔   学号:19020100280    学院:电子工程学院

转自:

https://max.book118.com/html/2016/1207/69449578.shtm

【嵌牛导读】嵌入式一般指嵌入式系统。嵌入式系统由硬件和软件组成。是能够独立进行运作的器件。Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。

【嵌牛鼻子】嵌入式 Linux 编译器 GCC 的使用

【嵌牛提问】嵌入式 Linux 编译器 GCC 如何使用?

【嵌牛正文】

1.3.1 GCC 概述

作为自由软件的旗舰项目,Richard Stallman 在刚开始编写 GCC 的时候,只是把它当作一个C 程序的编译器,GCC 的意思也只是 GNU C Compiler 而已。经过多年的发展,GCC除了能支持C语言,目前还支持Ada语言、C++语言、Java语言、Objective C 语言、PASCAL 语言、COBOL 语言,以及支持函数式编程和逻辑编程的 Mercury 语言等。

CC 也不再单指 GNU C 语言编译器,而是变成了 GNU 编译器家族。正如前文中所述,GCC的编译流程分为4个步骤,分别为以下内容。① 预处理(pre-processing)。② 编译(compiling)。③ 汇编(assembling)。④ 链接(linking)。编译器通过程序的扩展名来分辨编写源程序所用的语言,由于不同的程序所需要执行编译的步骤是不同的,因此GCC根据不同的后缀名对它们进行相应的处理。

1.3.2 GCC 编译流程分析

GCC使用的基本语法为gcc [option | filename]这里的option是GCC使用时的一些选项,通过指定不同的选项GCC可以实现强大的功能。这里的filename则是GCC要编译的文件,GCC会根据用户所指定的编译选项以及所识别的文件后缀名来对编译文件进行相应的处理。本小节从编译流程的角度讲解GCC的常见使用方法。

先来分析一段简单的C语言程序。该程序由两个文件组成,其中“hello.h”为头文件,在“hello.c”中包含了“hello.h”,其源文件如下所示。

/*hello.h*/

#ifndef _HELLO_H_

#define _HELLO_H_

typedef unsigned long val32_t;

#endif

/*hello.c*/

#include <stdio.h>

#include <stdlib.h>

#include "hello.h"

int main()

{

val32_t i = 5;

printf("hello, embedded world %d\n",i);

}

1.预处理阶段

GCC 的选项“-E”可以使编译器在预处理结束时就停止编译,选项“-o”是指定 GCC 输出的结果,其命令格式如下:gcc –E –o [目标文件] [编译文件]

由此可见,GCC确实进行了预处理,它把“hello.h”的内容插入到“hello.i”文件中了。

2.编译阶段

编译器在预处理结束之后使用。GCC首先要检查代码的规范性、是否有语法错误等,以确定代码实际要做的工作,在检查无误后,就开始把代码翻译成汇编语言。GCC的选项“-S”能使编译器在进行完编译之后就停止。由表1-6可知,“.s”是汇编语言原始程序,因此,此处的目标文件就可设为“.s”类型。

可以看到,这一小段C语言的程序在汇编中已经复杂很多了,这也是C语言作为高级语言的优势所在。

3.汇编阶段

汇编阶段是把编译阶段生成的“.s”文件生成目标文件,读者在此使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了。如下所示。

[root@localhost gcc]# gcc –c hello.s –o hello.o

4.链接阶段

成功编译之后,就进入了链接阶段。在这里涉及一个重要的概念:函数库。在这个程序中并没有定义“printf”的函数实现,在预编译中包含进来的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实现“printf”函数的呢?

最后的答案是,系统把这些函数实现都已经放入名为“libc.so.6”的库文件中去了,在没有特别指定时,GCC 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到“libc.so.6”库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容