常用的g++编译FLAG总结

  • -m32

    • 指定编译为32位应用程序
  • -m64

    • m64指定编译为64位应用程序
  • -ggdb

    • 产生GDB可调试的信息
  • -fPIC

    • 生成位置无关的代码
    • 这份代码如果未来要用在动态库上,就需要生成与位置无关的代码
  • -D

    • 1
      2
      3
      4
      -Dmacro
      相当于C语言中的#define macro。
      -Dmacro=defn
      相当于C语言中的#define macro=defn。
  • -Wall

    • 1
      一般使用该选项,允许发出GCC能够提供的所有有用的警告。也可以用-W{warning}来标记指定的警告。
  • -pipe

  • -O2

    • 1
      2
      3
      4
      5
      -O0
      -O1
      -O2
      -O3
      编译器优化选项分为4个级别,-O0表示没有优化,-O1为缺省值,建议使用-O2,-O3优化级别最高。
  • -funroll-loops

    • gcc来检查代码,进行循环展开,减少循环次数提高性能
  • -fstack-protector-all

    • 启用堆栈保护,为所有函数插入保护代码。
  • -rdynamic

    • 相比-g选项, -rdynamic 却是一个 连接选项 ,它将指示连接器把所有符号(而不仅仅只是程序已使用到的外部符号)都添加到动态符号表(即.dynsym表)里,以便那些通过 dlopen()backtrace() (这一系列函数使用.dynsym表内符号)这样的函数使用。
  • -shared

    • 1
      此选项将尽量使用动态库,为默认选项。优点:生成文件比较小。缺点:运行时需要系统提供动态库。
  • 错误不提示(忽略警告)

    • -Wno-write-strings
      • 应为你写的char* 是具有c风格的字符串,所以g++不识别

reference

本文标题:常用的g++编译FLAG总结

文章作者:Yang Shuai

发布时间:2019年04月24日 - 14:04

最后更新:2019年04月24日 - 14:04

原始链接:https://ysbbswork.github.io/2019/04/24/常用的g-编译FLAG总结/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!