红联Linux门户
Linux帮助

Linux下gcc与g++的差别

发布时间:2015-09-01 14:44:11来源:linux网站作者:GMPY_Tiger

一般而言,在Linux下编译程序分为以下4个阶段:

预处理:编译处理宏定义等宏命令(eg:#define)——生成后缀为“.i”的文件
编译:将预处理后的文件转换成汇编语言——生成后缀为“.s”的文件
汇编:由汇编生成的文件翻译为二进制目标文件——生成后缀为“.o”的文件
连接:多个目标文件(二进制)结合库函数等综合成的能直接独立执行的执行文件——生成后缀为“.out”的文件


在Linux下执行gcc与g++编译C++文件的差别:

后缀为.c的,gcc把它当作是C程序(cc/cpp才判定为C++源程序),而g++当作是c++程序
gcc无法进行库文件的连接,即无法编译完成步骤4;而g++则能完整编译出可执行文件。(实质上,g++从步骤1-步骤3均是调用gcc完成,步骤4连接则由自己完成)


下面进行一次简单的测试:
测试环境:CentOS 6.4
测试命令:

gcc -E 执行到步骤1,只处理宏命令,需要用重定向生成文件
gcc -S 执行到步骤2,生成文件.s
gcc -c 执行到步骤3,生成文件.o
g++ 分别编译于连接 .cc文件与.o文件


测试代码:

#include <iostream> 
using namespace std; 
int main() 

cout<<"This is a C++ program."<<endl; 


测试结果:

gcc -E 1.cc >> 1.i

Linux下gcc与g++的差别

vi 1.i 

Linux下gcc与g++的差别

gcc -S 1.cc 

Linux下gcc与g++的差别

vi 1.s 

Linux下gcc与g++的差别

gcc -c 1.cc 

Linux下gcc与g++的差别


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

g++ 1.o -o from_o 

Linux下gcc与g++的差别

运行结果:

Linux下gcc与g++的差别

g++ 1.cc -o from_cc 

Linux下gcc与g++的差别

运行结果:

Linux下gcc与g++的差别

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

gcc 1.cc

Linux下gcc与g++的差别


gcc和g++的区别:http://www.linuxdiyf.com/linux/13653.html