gcc的编译过程和gcc与g++的区别

208 阅读2分钟

每个喜欢C++程序员的必备知识储备

一、GNU编译

GCC的编译过程(4个过程5个文件)

编译工具链

  gcc的编译选项

        -E        将源文件预处理为预处理后的源文件
        -S        将预处理后的源文件编译成汇编文件
        -c        将汇编文件汇编成二进制文件
        -o        将二进制文件通过链接形成可执行文件
        -I(大i        指定include包含文件的搜索路径
        -g        生成调试信息,该程序可以被调试器调试
        -D        在程序编译的时候指定宏(Debug/Relese版)
        -w        不生成任何警告信息
        -wall        生成所有警告信息
        -l(小L)        在程序编译的时候指定使用的库
        -L        在程序编译的时候,搜索库的路径
        -fPIC        生成与位置无关的代码
   -shared        生成共享目标文件,通常用在建立共享库时
        -std        指定c方言,即c的版本
        -On        优化级别(0-3依次增高)

 gcc与g++的区别

        1.gcc和g++都是GNU(组织)的一个编译器

        2.后缀为.c的文件,gcc把它当作是c程序,g++当作是c++文件,c++的语法更加严格

        3.后缀为.cpp的文件,两者都认为是c++程序

        4.编译阶段,g++会调用gcc,对于c++代码,二者是等价的,但是因为gcc不会自动和c++程序使用库联接,所以通常用g++来完成链接,为了统一,编译/链接都使用g++

        5.gcc不会定义_cplusplus宏(误解),实际上买这个宏只是标志着编译器将会把代码按c还是c++语法来解释,所以,如果后缀.c的编译器用gcc编译器,那么_cplusplus就是未定义

        6.编译可以用gcc/g++,而链接可以用g++/gcc -lstdc++

        7.gcc不能自动和c++程序使用的库连接,所以通常使用g++