随想录(被低估的gcc&g++)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/feixiaoxing/article/details/84670433

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

    很多同学喜欢看代码,比如操作系统、数据库、脚本语言、android、虚拟软件什么的。但是却很少人会喜欢去研究编译器、连接器。其实编译器非常重要。一方面,它可以用来支持os、middle ware、app等各种软件的编译,另一方面它可以支持调试、调优和系统性能分析。这些额外生成的信息对于readelf、nm、strip、objdump、gdb非常有用。下面,我们就说说gcc&g++常用的一些选项。

1、-c

编译c文件

2、-o

生成目标文件

3、-S

将c文件生成汇编文件

4、-include

包含特定头文件

5、-I(大写的i)

指明头文件目录

6、-l(小写的l)

指明具体的动态库名称

7、-L

指明动态库目录

8、-D

添加默认macro定义

9、-static

强制生成一个exe文件,不依赖动态库,调试动态库问题时非常有效

10、-shared -fPIC

生成动态库

11、-g

生成调试信息

12、-Werror

将warning看成是error,代码静态检查的时候非常有效

13、-O1, -O2, -O3

基于速度的优化

14、-Os

基于大小的优化

15、-M

获取当前文件依赖的头文件,编写Makefile的时候非常有效

16、-E

完成文件预处理,此选项可以完成macro的翻译

17、-fprofile-arcs -ftest-coverage

在每一行代码后生成统计信息,用于gcov,主要分析代码覆盖率等

18、-pg

在一个函数的入口和出口添加额外代码,用于gprof,主要分析代码性能,kernel中ftrace的静态分析也是这个原理

19、-T

确认lds连接脚本

20、-nostartfiles -nostdlib

没有起始文件,没有标准库,此选项主要用于firmware的编译,不依赖于os

21、-m32, -m64

生成32位程序,生成64位程序

22、-std=c99

确定c或者cpp语言支持的语法标准

23、-v

显示编译全过程

24、--help

显示帮助信息,如果实在记不得了,就用用这个选项好了

猜你喜欢

转载自blog.csdn.net/feixiaoxing/article/details/84670433