天天看点

linux之c/c++编译器gcc/g++的用法以及介绍

gcc/g++是linux下常用的c/c++编译器,目的就是把test.c文件转换成可运行的文件。

用法:

gcc  [可选项]  要编译的文件  [可选项]  [目标文件]

比如:(-E和-o就是可选项)

gcc -E test.c -o test.i
           

------------------------------------------------------------------------------------------------------------

比如我们用vim写好了一个test.c文件

我们可以这样编译他:(这是简化的写法,复杂的4部在下面)

gcc test.c -o test
           

然后运行他:

./test
           

就可以显示运行的结果。

可选项的作用有很多,-o的意思是把左边文件输出到右边文件

其实gcc test.c -o test这句话有4个步骤:

我们知道c程序编译有4个步骤:预处理——编译——汇编——连接

  1. 预处理:进行宏替换
    • 主要是处理:宏、文件包含、条件编译、去除注释等等。
    • 预处理指令是以#开头的代码行
    • 如:gcc -E test.c -o test.i
    • -E:让gcc在预处理结束后停止编译
    • -o是目标文件,“.i”是经过预处理的c源文件
  2. 编译:生成汇编
    • 主要检查错误
    • 只进行编译而不生成汇编代码
    • 如:gcc -S test.i -o test.s
  3. 汇编:生成机器可识别代码
    • 可以用-c看到汇编代码已转化为“.o”的二进制目标代码
    • 如:gcc -c test.s -o test.o
  4. 连接:生成可执行文件或者库文件
    • 如:gcc test.o -o test
    • 之后就可以“./test”运行了

下面是全部可选项的介绍:

-E:只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里

-S:编译到汇编语言,不进行汇编和连接

-c:编译到目标代码

-o:输出到文件

-static:对生成的文件采用静态连接

-g:生成调试信息,GUN调试器可以用这个信息

-share:尽量使用动态库,使用生成文件比较小,但需要系统有动态库

-O0,O1,O2,O3(第一个是大写字母o,第二个是数字0123):编译器的4个优化选项级别,O0没有优化,O1缺省值,O3优化级别最高。

-w:不生成任何警告信息

-Wall:生成所有警告信息

继续阅读