嵌入式(十一)——gcc常用编译选项

简介: 嵌入式(十一)——gcc常用编译选项

编译器gcc


1.1 gcc概述


GNU计划提供编译器(unix cc编译器) (编译工具链) --> (交叉编译工具链)


1.2 什么是交叉编译


0a2653c851af460fa595bd959398a8f1.png


交叉编译:在宿主机下编程出在目标机下运行的代码的过程

通俗地讲,就是在当前CPU平台下编译出在其他CPU平台运行的代码的过程

Linux上查看编译器:arm-linux-gnueabihf-


1.3 源文件到可执行经历步骤


预处理、编译、汇编、连接(.c -> .s -> .o -> elf)


预处理的任务:头文件展开(#include)、宏替换(#define)、条件编译(#ifdef、#ifndef) (#开头代码)

编译的任务:检查语法、转成汇编、生成汇编文件(.s/.S)

汇编的任务:编译汇编文件,生成目标文件(.o)

链接的任务:链接所有目标文件,生成符号表,生成可执行文件


1.4 编译选项


-o(可执行重命名:elf)


什么是elf格式

一种Linux下常用的可执行文件、对象、共享库的标准文件格式

还有许多其他可执行文件格式: PE、Mach-O、COFF、 COM…

ELF中的数据按照Segment和Section两 个概念进行划分


-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(编译优化)


一级优化(gcc -O1 optimize.c -o optimize1)

二级优化(gcc -O2 optimize.c -o optimize1)

三级优化(gcc -O3 optimize.c -o optimize1)

编译如何优化的:

gcc编译优化-O0 -O1 -O2 -O3 -OS解析


-w (关闭警告warning)禁用

-Wall (全打开warning)

以后程序:gcc -Wall -O3 demo.c -o demo



gcc中>


属性:管道

作用:输出结果重定向

gcc -E hello.c > hello.i


x86复杂指令集、ARM精简指令集

注意:局部变量地址(可加static)


相关文章
|
5月前
|
前端开发 C语言
gcc动态库升级
gcc动态库升级
|
3月前
|
编译器 Linux C语言
gcc的编译过程
GCC(GNU Compiler Collection)的编译过程主要包括四个阶段:预处理、编译、汇编和链接。预处理展开宏定义,编译将代码转换为汇编语言,汇编生成目标文件,链接将目标文件与库文件合并成可执行文件。
97 11
|
5月前
|
编译器 开发工具 C语言
Gcc 链接文件
Gcc 链接文件
45 4
|
5月前
|
编译器 C语言 C++
MinGW安装gcc
MinGW安装gcc
114 0
|
7月前
|
自然语言处理 编译器 Go
GCC:GNU编译器
GCC:GNU编译器
100 0
|
8月前
|
编译器 Linux 开发工具
|
8月前
|
NoSQL 编译器 开发工具
006.gcc编译器
gcc是什么?
92 0
006.gcc编译器
|
8月前
|
存储 NoSQL 算法
从一个crash问题展开,探索gcc编译优化细节
问题分析的过程也正是技术成长之路,本文以一个gcc编译优化引发的crash为切入点,逐步展开对编译器优化细节的探索之路,在分析过程中打开了新世界的大门……
|
7月前
|
Java 编译器 Linux
技术经验解读:【转载】详解GCC的下载和安装(源码安装)
技术经验解读:【转载】详解GCC的下载和安装(源码安装)
215 0
|
8月前
|
C语言
gcc的简易用法
【5月更文挑战第10天】gcc的简易用法。
77 8