文章目录
编译器gcc
1.1 gcc概述
1.2 什么是交叉编译
交叉编译:在宿主机下编程出在目标机下运行的代码的过程
通俗地讲,就是在当前CPU平台下编译出在其他CPU平台运行的代码的过程
Linux上查看编译器:arm-linux-gnueabihf-
1.3 源文件到可执行经历步骤
- 预处理的任务:头文件展开(#include)、宏替换(#define)、条件编译(#ifdef、#ifndef) (#开头代码)
- 编译的任务:检查语法、转成汇编、生成汇编文件(.s/.S)
- 汇编的任务:编译汇编文件,生成目标文件(.o)
- 链接的任务:链接所有目标文件,生成符号表,生成可执行文件
1.4 编译选项
-o(可执行重命名:elf)
-E:只进行预处理(例:gcc -E hello.c > hello.i)
头文件路径:/usr/include/stdio.h(用vim打开)
<>与"":搜索路径不同
<>:在系统文件路径(usr/include)搜索,若没有,则报错
“”:于现在当前目录查找,若没有再到系统头文件目录查找,若没有,就报错
规范:<>包含系统头文件、""包含自定义文件
.h声明函数文件,.c编写函数文件(如add.h,add.c)则(gcc hello.c add.c -o hello)
如果add.c不在当前目录
-I 指定头文件第三方搜索路径(gcc -I/root/205/1105/test hello.c add.c -o hello)
-S (进行编译阶段)(-E是为了检查那些复杂的宏)(gcc -S -I./test hello.c add.c)
-c (进行汇编阶段)(gcc -c -I./test hello.c add.c)
-O1 -O2 -O3(编译优化)
-w (关闭警告warning)禁用
-Wall (全打开warning)
以后程序:gcc -Wall -O3 DEMO.C -o demo
附
gcc中>
x86复杂指令集、ARM精简指令集
注意:局部变量地址(客家static)