gcc常用编译选项

目录

1、gcc概述

GNU计划提供的编译器。(在unix系统中,则是cc编译器)

2、由源文件到可执行文件需要经历的步骤
  1. 预处理:头文件展开(#include)、宏替换(#define)、条件编译(#ifdef)
    (预处理阶段处理的都是以#开头的代码)
  2. 编译:检查语法、转成汇编、生成汇编文件(.s/.S)
  3. 汇编:编译汇编文件,生成目标文件(.o)
  4. 链接:链接所有目标文件,生成符号表,生成可执行文件(elf)
    (elf即可执行连接文件格式,elf文件参与程序的连接和执行,即参与建立一个程序和执行一个程序的过程)
3、 交叉编译

在宿主机下编程出在目标机下运行的代码的过程,这就是交叉编译。(首先需下载交叉编译器)
(即在当前cpu平台编译出在其他cpu平台运行的代码的过程)

4、编译选项

(1)-o:可执行文件重命名(elf格式)

(2)-E:只进行预处理
gcc -E demo.c > demo.i :将预处理信息放到.i文件中

(3)-S:进行编译阶段

(4)-c:进行汇编阶段

(5)-O1 -O2 -O3:编译优化
gcc -O1 demo.c -o demo :一级优化
gcc -O2 demo.c -o demo :二级优化
gcc -O3 demo.c -o demo :三级优化
(time ./demo:可以测算代码运行的时间)

(6)-w:关闭警告
gcc -w demo.c -o demo
(不推荐使用,警告可能不影响程序的执行,但忽视警告运行时可能会造成程序上的一些问题)

(7)-Wall:开启所有警告

(8)-I+路径:指定头文件的第三方搜索路径
#include “stdio.h"和#include <stdio.h>的区别:搜索路径不同
<>:在系统头文件目录(/usr/include)中搜索,若没有,则报错
“”:先在当前目录中搜索,若没有,则去系统头文件目录中搜索,若还没有,在报错
规范:<> :包含系统头文件 “”:包含自定义文件
(”"虽然方便,但是大体量代码,仍需注意规范,提高编译效率)

补充:代码注释的方法
(1)/* */
(2)#if0…#endif :注释 #if1…#endif:解开注释

上一篇:0-9999999999999之间long类型的数值转换为长度为8的字符串(62进制)


下一篇:[BUUCTF-pwn] wdb_2018_final_pwn3