2017-6-26 GCC编译器的一些选项

来源:互联网 发布:图书软件项目计划书 编辑:程序博客网 时间:2024/06/06 02:18

在编译中用的几个编译选项,但只是囫囵吞枣,用用而已。知其然而不知其所以然。这里就是注记一下所用到的几个选项的含义。

  1. -Os
    -O是最常见的gcc的优化选项。

    • -O0 不进行优化。
    • -O1 缺省值。
    • -O2/O3 其中O0 -> O3,是优化程度的增加。O0就是不优化,O3是最大程度的优化。但值得注意的是,O3并不一定总是最好的优化结果。
    • -Os 以输出代码的size为目标的优化选项。
  2. -static/-share
    这个编译选项是指链接器链接的方式。static是静态链接,不使用动态链接库。链接器会把所有和程序运行相关的内容都打包到最后的可执行程序中去,因此最后得到的可执行代码的size会非常大。但静态链接的好处是,即使脱离了运行环境中的库,静态链接得到的输出也是能够正常运行的,因为所有的内容已经包含在最终的可执行文件中了。
    -share 选项则和-static选项相反。此选项将尽量使用动态库,所以生成文件比较小,但是需要系统和动态库的支持。

  3. -mcmodel
    Generate code for the Medium/Anywhere code model: the program may be linked anywhere in the address space, the text segment must be less than 2G bytes, and data segment must be within 2G of the text segment. Pointers are 64 bits.

  4. -fvisibility
    gcc中表明符号可见性的一种方式。
    控制符号可见性

  5. -mno-save-restore
    这个选项是RISC-V所特有的一个选项。表明是否使用更小但是也更慢的启动和结尾代码。
    RISC-V options

  6. -nostartfiles/-nodefaultlib/-nostdlib
    表明在链接的时候不使用标准的系统启动文件/标准的系统库/std的库。