嵌入式之:Linux下文件编译过程
本文主要三个部分:1.GNU GCC简介
2.C/C++交叉编译器arm-elf-gcc
3.make文件,用于工程管理
部分一:GNU GCC简介:
该编译器基本功能:
(1)输出预处理后的文件(展开头文件和替换宏)
(2)输出.s的汇编文件
(3)输出二进制目标文件
(4)输出.o可执行文件
(5)转换文件格式
(6)生成静态库文件
工具:
arm-elf-gcc:她是前端程序通过调用其他程序实现把code编译为可执行文件
arm-elf-as:将汇编转为ELF(executable and linking format)格式的文件,该目标文件具有重定位能力,方便被arm-elf-ld工具同其他目标模块文件整合。 <==就是平常说的中间目标文件
arm-elf-ld:根据链接定位文件linkcmd中的定位信息,将所有的目标文件整合为一个单一的绝对定位的目标程序。
arm-elf-ar:将多个obj文件打包成一个函数库(库中一般都是目标文件不是可执行文件也不是源代码)。
arm-elf-objcopy:由.elf文件生成.bin文件(可执行文件)
arm-elf-objdump:由.elf文件生成.list文件(反汇编文件)
bin2hex:将可执行文件转为.hex文件
部分二:C/C++交叉编译器arm-elf-gcc
关键是对options的认识(仅仅列出个人认为重要的options):
1.控制选项
-c :输入源文件编译成目标文件
-S: 输入源文件编译成汇编文件
-o file :将输出内容存于file文件中
-v : 打印编译过程执行的命令
2.语言选项
3.警告选项
-w:关闭所有警告
-wall: 打开所有警告
-wimplicit:
-wno-implicit:
4.调式选项
-g:在文件中产生调式信息
5.优化选项
-O0:不优化
-O1:一级优化
-O2:二级优化
-O3:三级优化
6.预处理选项
-E:运行C的预处理
-C:在运行-E预处理时不去掉注释
-D MACRO : 定义宏,默认值为1
-D MACRO= define : 定义宏,取值为define
7.汇编选项
9.搜索路径选项
-l dir : 设置搜索路径为dir ,可能还要跟-L 选项配合使用
-l-:设置只是对#include"file"中file进行搜索目录
10.各种指定文件生成选项
-o file: 将输出内容存于file文件中
-E:只对源文件进行预处理,默认输出到标准输出
-S:将C/C++文件生成汇编文件
-c:将源文件编译成目标文件
注释:高亮的items有利于debug问题,跟踪执行过程。
部分三:工程管理器make
主要内容:
1.显示规则
(1) targets: dependencies
command
.............
(2)VPATH :设置文件的搜索路径(默认在当前路径下搜索)
2.隐含规则 <===一般不用,可读性不好
3.变量定义
variable_name = variable_value
或者
varialbe_name := variable_value
CC = arm-elf-gcc
AS := arm-elf-as
AR = arm-elf-ar
LIBPATH = ./lib
引用变量:$(varialbe_name) 或者${variable_name}
makefile内部提供的常用变量:$@ 表目标名
$< 表第一个依赖文件
$^ 表所有的依赖文件
eg:
demo.o : demo.c demo.h
${CC} ${CFLAGS} $< -o $@
上例子中,$< 值为demo.c $@值为demo.o $^值为demo.c demo.h
Makefile调用方法:
$(function argumemts)
${function argumemts}
makefile内部提供的常用函数:
$(subst,from_string ,to_string,text) <====将text中的from_sring替换为to_string
$(patsubst pattern,replacememt,text) <=== 按模式pattern,替换text中字符串。
4.指令
5.注释
嵌入式之:Linux下文件编译过程的更多相关文章
- LINUX下文件编译
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- FFmpeg在Linux下安装编译过程
转载请把头部出处链接和尾部二维码一起转载,本文出自:http://blog.csdn.net/hejjunlin/article/details/52402759 今天介绍下FFmpeg在Linux下 ...
- 在Linux下安装PHP过程中,编译时出现错误的解决办法
在Linux下安装PHP过程中,编译时出现configure: error: libjpeg.(a|so) not found 错误的解决办法 configure: error: libjpeg.(a ...
- 从四个问题透析Linux下C++编译&链接
摘要:编译&链接对C&C++程序员既熟悉又陌生,熟悉在于每份代码都要经历编译&链接过程,陌生在于大部分人并不会刻意关注编译&链接的原理.本文通过开发过程中碰到的四个典型 ...
- dos2unix,去掉Linux下文件中的^M
Windows系统下使用VS2010编写好的CPP文件,想放到Linux上进行编译.发现Linux上文件中的每行代码末尾都跟着^M这个符号. 为什么同一份文件在windows上和Linux上显示的不一 ...
- Windows与Linux下文件操作监控的实现
一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场 ...
- ACE-6.1.0 linux 下的编译与安装步骤
ACE-6.1.0 linux 下的编译与安装步骤 引用至http://www.cnblogs.com/liangxiaxu/archive/2013/03/07/2948417.html 1.从 ...
- linux 下文件误删恢复
linux 下文件误删恢复 0x01 事件背景 某天晚上写代码的时候,本来想删除当前目录下一个叫xxx的文件夹 rm -rdf ./xxx/*, 结果光顾着和人说话,一不留神手贱把命令敲成了rm -r ...
- 学习笔记12—linux下文件的复制、移动与删除
查看centOS 版本 cat /etc/redhat-release 1,复制粘贴文件 cp [选项] 源文件或目录 目标文件或目录 2,剪切粘贴文件 mv [选项] 源文件或目录 ...
随机推荐
- Django (六) 视图 views
views 1. 视图及HttpRequest 和HttpResponse Django中的视图主要用来接受Web请求,并做出响应. 视图的本质就是一个Python中的函数 视图的响应分为两大类 1) ...
- Java中try catch finally语句中含有return语句的执行情况
finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因.下面 ...
- HashMap的小总结 + 源码分析
一.HashMap的原理 所谓Map,就是关联数组,存的是键值对——key&value. 实现一个简单的Map,你也许会直接用两个LIst,一个存key,一个存value.然后做查询或者get ...
- String的小笔记
String类的对象是不可变的! 在使用String类的时候要始终记着这个观念.一旦创建了String对象,它就不会改变. String类中也有可以改变String中字符串的方法,但只要是涉及改变的方 ...
- Springboot的static和templates
static和templates部分参考博客:https://blog.csdn.net/wangb_java/article/details/71775637 热部署参考博客:https://www ...
- [译]Understanding ECMAScript6 迭代器与生成器(未完)
迭代器在许多编程语言中被作为一种更易处理数据集合的方式被使用.在ECMAScript6中,JavaScript添加了迭代器,将其作为此语言的一个重要特征.当再加上新的方法和新的集合类型(比如集合与映射 ...
- 我的NopCommerce之旅(4): 定时任务之邮件
一.功能简介 用户购买物品生成订单后,系统将发送邮件提醒给用户 二.操作步骤 后台配置一个系统的默认发送邮箱 启动定时任务,这里包括多个任务,只需要启动邮件任务 查看邮件发送情况 三.数据库分析 [d ...
- UEditor的KityFormula在IIS中部署,显示不了的解决方案
在此,首先感谢我的同事,找到了问题所在. 因Web项目中需要有输入公式的功能(高等数学中需要),普通公式插件无法满足,所以找了KityFormula这款插件. 看了下里面的公式,在数学方面确实比较全面 ...
- bootstrap基本组件
bootstrap分页 <nav> <ul class="pagination"> <li><a href=&q ...
- 我也质疑下petshop
很多人都研究过petshop,我开始认识分层架构也是从研究这个petshop开始的.但是我发现很多人一谈三层架构就是 petshop那一套东西.实体类,DAL,BLL那一套东西.首先我不 ...