在 Linux 上使用 gcc/g++ 编译 C/Cpp 程序。

源文件到可执行程序

  1. 预处理

    展开头文件/宏替换/去掉注释/条件编译,生成.i文件。

  2. 编译

    检查语法,生成汇编文件.s

  3. 汇编

    汇编代码转换机器码,生成.o文件。

  4. 链接

    将上一步生成的以及一些依赖的库链接起来生成可执行程序。

使用 gcc 编译

1
gcc Test.c --save-temps -o Test # 可保留C程序编译过程中产生的临时文件

step by step

  1. 预处理

    1
    gcc –E Test.c –o Test.i
  2. 编译

    1
    gcc –S Test.i –o Test.s
  3. 汇编

    1
    gcc –c Test.s –o Test.o
  4. 链接

    1
    gcc Test.o –o Test

一些参数

-g

编译时候保留调试信息,如果要使用 gdb 调试程序,必须保留调试信息。

-O

优化级别,-O0-O3,代表4 个不同的优化级别。

一般业界公认的是O2,O3比较激进,-O1为缺省值。如果为了调试,最好用 O0。