Compiler Options

Compiler Options

丈夫非无泪,不洒离别间。

gcc 编译器是经常使用的,其编译选项很重要。

1、编译警告

  • -w : 关闭所有警告,不建议使用
  • -W : 开启素有gcc 能提供的警告
  • -werror : 将所有警告转为错误,开启该选项,遇到警告会终止编译
  • -Wall: 编译后显示所有警告.

2、占用空间

概念:GCC链接操作是以section作为最小的处理单元,只要一个section中的某个符号被引用,该section就会被加入到可执行程序中去。

因此,GCC在编译时可以使用 -ffunction-sections-fdata-sections 将每个函数或符号创建为一个sections,其中每个sections 名与function 或data 名保持一致。

而在链接阶段, -Wl,–gc-sections 指示链接器去掉不用的section(其中-Wl, 表示后面的参数 -gc-sections 传递给链接器),这样就能减少最终的可执行程序的大小了。

使用方法

CFLAGS += -ffunction-sections -fdata-sections
LDFLAGS += -Wl,--gc-sections

3、关于优化选项:

  • -ON :指定代码的优化等级为N,可取值为0,1,2,3; o0没有优化,o3优化级别最高,默认 -O1。
  • -os 使用了-o2的部分优化选项,同事对代码尺寸进行了优化。

4、其他选项:

  • -masm=intel :代表生产汇编格式是intel格式,默认是AT&T格式

  • -save-temps=obj -fverbose-asm -fno-asynchronous-unwind-tables:生成objdump的反汇编文件