0%

GCC常用参数

GCC&G++

官方资料

本文基于4.8.5版本

编译程度

  • -c:预处理、编译和汇编,生成”.o”
  • -S:预处理和编译,生成”.c”
  • -E:预处理,不生成文件, 需要把结果重定向到一个文件
  • -o:指定目标名称
  • -pipe:使用管道代替编译中临时文件
  • -x:指定语言

C/C++ 编译标准

  • -ansi:以ansi c 标准编译
  • -std=standard:指明编译标准(如C++11)

告警

  • -w:禁止显示所有警告信息
  • -Wall:打开所有警告选项

调试

  • -g:在编译的时候,产生调试信息。
  • -ggdb3:允许调试宏

优化

  • -O0:禁止优化

  • -O1/-O:尝试优化

  • -O2:尽可能优化,但拒绝空间换时间
  • -O3:尽可能优化,接受空间换时间

预定义

  • -Dname:预定义一个名为name的宏,值为1
  • -Dname=definition:预定义名为name,值为definition的宏

链接

  • -llibrary & -l library:链接名为library的库
  • -s:除可执行文件中的符号表和重定位信息。用于减小可执行文件的大小
  • -static:阻止与共享库的链接
  • -shared:尽量使用动态库
  • -T script:链接器脚本
  • -Wl,option:链接器参数
    • -rpath=./:指定链接库目录
    • -Bsymbolic:优先使用本地符号
    • --hash-style=gnu:查找符号的散列表的配置规则,有sysv、gnu和both,系统不同规则不同
  • -shared-libgcc & -static-libgcc & -static-libstdc++:标准库的链接方式

搜索目录

  • -Idir:把dir加入到搜索头文件的路径列表中

  • -Ldir: 把dir加入到搜索库文件的路径列表中。

代码生成

  • -fPIC & -fpic:生成位置无关的代码(动态库),对固定地址的访问都通过全局偏移表(GOT)来实现,-fPIC对GOT表大小无限制,fpic有
  • -fPIE & -fpie:用来生成位置无关的可执行代码