gcc g++区别与联系

编译阶段是相同的,链接阶段g++默认链接c++库,gcc没有。
所以一般情况下用gcc编译c文件,用g++编译cpp文件。
但是也可以用gcc编译cpp文件,但后面需要加一个选项-lstdc++,作用是链接c++库
还可以用g++编译c文件

一般而言,在Linux下编译程序分为以下4个阶段:
  1. 预处理:编译处理宏定义等宏命令(eg:#define)——生成后缀为“.i”的文件    
  2. 编译:将预处理后的文件转换成汇编语言——生成后缀为“.s”的文件    
  3. 汇编:由汇编生成的文件翻译为二进制目标文件——生成后缀为“.o”的文件    
  4. 连接:多个目标文件(二进制)结合库函数等综合成的能直接独立执行的执行文件——生成后缀为“.out”的文件
在Linux下执行gcc与g++ 编译C++文件的差别:
  1. 后缀为.c的,gcc把它当作是C程序(cc/cpp才判定为C++源程序),而g++当作是c++程序
  2. gcc无法进行库文件的连接,即无法编译完成步骤4;而g++则能完整编译出可执行文件。(实质上,g++从步骤1-步骤3均是调用gcc完成,步骤4连接则由自己完成)
下面进行一次简单的测试:
测试环境:CentOS 6.4
测试命令:
  1. gcc -E 执行到步骤1,只处理宏命令,需要用重定向生成文件
  2. gcc -S 执行到步骤2,生成文件.s
  3. gcc -c 执行到步骤3,生成文件.o
  4. g++ 分别编译于连接 .cc文件与.o文件
测试代码:
  1. #include <iostream>  
  2. using namespace std;  
  3. int main()  
  4. {  
  5.     cout<<"This is a C++ program."<<endl;  
  6. }  
#include <iostream>
using namespace std;
int main()
{
    cout<<"This is a C++ program."<<endl;
}
测试结果:
  1. gcc -E 1.cc >> 1.i  
gcc -E 1.cc >> 1.i

  1. vi 1.i  
vi 1.i


  1. gcc -S 1.cc  
gcc -S 1.cc

  1. vi 1.s  
vi 1.s


  1. gcc -c 1.cc  
gcc -c 1.cc


接下来测试g++ 1.o 与直接g++ 1.cc的结果:
  1. g++ 1.o -o from_o  
g++ 1.o -o from_o

运行结果:


  1. g++ 1.cc -o from_cc  
g++ 1.cc -o from_cc

运行结果:


若直接用gcc编译链接c++文件会出错,因无法链接。
  1. gcc 1.cc  
gcc 1.cc


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值