第5课 嵌入式C语言编译器

1. GCC与gcc

(1)GCC:(GNU Compiler Collection)

  GNU编译器集合,包含众多语言的编译器,如C、C++、Java、D、Objective-C等

(2)gcc:特指GCC中的C语言编译器

(3)GCC与嵌入式:多数嵌入式操作系统都是基于GCC进行源码编译。如Linux、VxWorks、Android等。

(4)实际开发中,内核开发一般用gcc应用开发一般用gcc/g++/gdc

2. 交叉编译

(1)背景

  ①嵌入式设备往往资源受限

  ②不可能在嵌入式上直接对处理器进行编程

(2)解决方案

  ①在开发主机(PC)上对源码进行编译

  ②最终生成目标主机(嵌入式设备)的可执行程序

(3)gcc是如何进行交叉编译的?

  ①配置目标主机的编译工具链如:arm-linux

  ②配置工具链的具体版本(根据具体的目标代码选择相应的工具链版本,正确使用关于硬件体系结构的特殊编译选项

(4)案例:大型企业嵌入式开发环境

3. 初识编译器

(1)编译器构成

(2)编译过程

(3)扩展问题:多语言混合开发

  ①开发方式1:从语言到语言(如.NetFrame框架)

  ②开发方式2:从语言到可执行的二进制代码(如QQ的开发)

  ③开发方式3:

4. gcc关键编译选项

(1)预处理指令:gcc -E file.c -o file.i

(2)编译指令:  gcc -S file.i -o file.s

(3)汇编指令:  gcc -c file.s –o file.o

(4)生成映射文件:gcc -WL,-MP=test.map file.c

(5)宏定义:      gcc -D‘TEST="test"‘ file.c

(6)获取系统头文件路径:gcc -v file.c

(7)生成依赖关系:

  ①获取目标的完整依赖关系:gcc -M test.c

  ②获取目标的部分依赖关系:gcc -MM test.c

(8)指定库文件及库文件搜索路径:

  ①gcc test.c -L. -lfunc  //.表示当前目录

  ②其中-L选项指定库文件的搜索路径,-l选项指定库文件

【实例分析】gcc编译选项

时间: 2024-10-06 15:15:34

第5课 嵌入式C语言编译器的相关文章

嵌入式之 C 语言编译器(五)

我们在嵌入式的开发中经常会见到 GCC 和 gcc,那么它们两有何不同呢?GCC(GNU Compile Collection) 是指 GNU 编译器集合,包含众多语言的编译器,如 C.C++.Java.D.Objective-C 等:而 gcc 则是特指 GCC 中的 C 语言编译器.那么 GCC 与嵌入式的关系是怎样的呢?多数嵌入式操作系统都是基于 GCC 进行源码编译,如 Linux.VxWorks 以及 Android 等.在实际的开发中,内核相关的开发用的是 gcc,而应用开发用的是

嵌入式C语言里的土豪们之除法与移位

土豪这个词用在接下来要出场的C语言再合适不过了.他们在嵌入式C语言里占尽了奢华,但是毕竟我们更需要一个节约型的微生态环境.在这里简单给大家分析一下嵌入式C语言编程时用到的除法与移位. 本文引用地址:http://www.eepw.com.cn/article/182359.htm 除法土豪 除法在嵌入式微处理器里可算是一个消耗大户,复杂的实现方式不仅占用了大师宝贵的计算时间而且精度有限情况下占用了大片的RAM.因此,常常在各类文章里看到,编程人员应该使用右移运算来代替除法.这个右移方法没有问题,

嵌入式C语言常用关键字

1.static关键字 这个关键字前面也有提到,它的作用是强大的. 要对static关键字深入了解,首先需要掌握标准C程序的组成. 标准C程序一直由下列部分组成: 1)正文段--CPU执行的机器指令部分,也就是你的程序.一个程序只有一个副本:只读,这是为了防止程序由于意外事故而修改自身指令: 2)初始化数据段(数据段)--在程序中所有赋了初值的全局变量,存放在这里. 3)非初始化数据段(bss段)--在程序中没有初始化的全局变量:内核将此段初始化为0. 注意:只有全局变量被分配到数据段中. 4)

2017-2018-1 20155331 嵌入式C语言

2017-2018-1 20155331 嵌入式C语言 作业要求: 在作业本上完成附图作业,要认真看题目要求. 提交作业截图 作弊本学期成绩清零(有雷同的,不管是给别人传答案,还是找别人要答案都清零) 自己做错的原因: 自己在课下的没能很好的完成学习任务. 正确答案 提取小时: #define Time_Addr 0xFFFFC0000 //实时钟芯片的IO映像基址是OxFFFFC0000 #define TIME *(volatile int *)(Time_Addr+2) int getHo

嵌入式C语言全套视频教程云盘下载!

了解过嵌入式开发的朋友们都有一定的了解,语言是学习嵌入式开发必须具备的工具语言,学好C语言基础可以更好的学习嵌入式开发.今天在这里给大家分享一个嵌入式C语言全套视频教程,需要的朋友可以下载来看看! 课程目录部分截图: 百度云盘下载:http://pan.baidu.com/s/1c1OETIo 密码:cgcj

【Web探索之旅】第二部分第一课:客户端语言

内容简介 1.第二部分第一课:客户端语言 2.第二部分第二课预告:服务器语言 第二部分:Web编程语言和工具 大家好.上一个部分我们学习了Web的一些基本概念: 什么是Web? Internet和Web的区别 Web的历史 第二部分我们会正式进入Web学习的主题了.我们会带大家了解一个我们平时访问的网站(Web site)是如何运作的.首先我们来看看Web开发使用到的编程语言和数据库,一些框架和内容管理系统,还有响应式设计.这一部分会有不少原理,概念比较重要,不过我们会用形象地比喻来阐明. 第二

【Web探索之旅】第二部分第二课:服务器语言

内容简介 1.第二部分第二课:服务器语言 2.第二部分第三课预告:框架和内容管理系统 第二部分第二课:服务器语言 介绍了Web的客户端,我们来谈谈Web的服务器端. 既然客户端有客户端的编程语言(HTML,CSS和JS),那么我们服务器端岂能逊色呢,对吧. 服务器端也有不少种编程语言.这些编程语言写成的程序会在服务器端的电脑上被执行. 如果说客户端的语言编写的程序决定了我们的网页的外观,那么服务器端的语言编写的程序决定了网页的功能和如何与用户交互. 你也许会问:"既然我们可以用HTML,CSS和

第一个C语言编译器是怎样编写的?

首先向C语言之父Dennis MacAlistair Ritchie致敬! 当今几乎所有的实用的编译器/解释器(以下统称编译器)都是用C语言编写的,有一些语言比如Clojure,Jython等是基于JVM或者说是用Java实现的,IronPython等是基于.NET实现的,但是Java和C#等本身也要依靠C/C++来实现,等于是间接调用了调用了C.所以衡量某种高级语言的可移植性其实就是在讨论ANSI/ISO C的移植性. C语言是很低级的语言,很多方面都近似于汇编语言,在<Intel32位汇编语

你知道第一个 C 语言编译器是如何编写的吗?

C语言是很低级的语言,很多方面都近似于汇编语言,在<Intel 32位汇编语言程序设计>一书中,甚至介绍了手工把简单的C语言翻译成汇编的方法.对于编译器这种系统软件,用C语言来编写是很自然不过的,即使是像Python这样的高级语言依然在底层依赖于C语言(举Python的例子是因为Intel的黑客正在尝试让Python不需要操作系统就能运行--实际上是免去了BIOS上的一次性C代码).现在的学生,学过编译原理后,只要有点编程能力的都可以实现一个功能简单的类C语言编译器. 可是问题来了,不知道你有