什么是gcc和g++?
首先说明:gcc 和 GCC 是两个不同的东西
GCC:GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C、Ada等语言。
gcc是GCC中的GUN C Compiler(C 编译器)
g++是GCC中的GUN C++ Compiler(C++编译器)
一个有趣的事实就是,就本质而言,gcc和g++并不是编译器,也不是编译器的集合,它们只是一种驱动器,根据参数中要编译的文件的类型,调用对应的GUN编译器而已
由于gcc和g++的用法相同,下面只简单介绍gcc的使用:
- gcc -E filename.c -o filename.i
- 将c文件转化成C++文件,这个过程也叫做预处理过程
- gcc -S filename.i -o filename.s
- 将预处理过程生成的.i后缀的文件转化成汇编文件,里面存储的是相应的汇编代码,这个过程叫做编译。
- gcc -c filename.s -o filename.o
- 将汇编文件中的汇编代码翻译成相应的机器语言,这个过程叫做汇编。
- gcc filename.o -o filename.exe
- 这条指令是完成链接这个过程的,它通过链接器ld将运行程序的目标文件和库文件链接在一起,生成最后的可执行文件
- 生成可执行文件后,我们就能够调用相应的程序了。
gcc和g++的区别有一个误区就是,大家看名字就认为gcc是编译C语言的,g++是编译C++的
实际上他们的区别主要是以下两点:
区别一:gcc默认只连接C库并不会连接C++库,g++会默认连接C标准库和C++标准库
区别二:gcc如果编译.c文件,则按照C语言的方式编译,如果编译.cpp文件则按照C++的方式编译。g++不管是.c文件还是.cpp文件都是按照C++的方式进行编译。
总结
gcc和g++的区别主要是在对cpp文件的编译和链接过程中,因为cpp和c文件中库文件的命名方式不同,那为什么g++既可以编译C又可以编译C++呢,这时因为g++在内部做了处理,默认编译C++程序,但如果遇到C程序,它会直接调用gcc去编译。
参考文献:Linux环境中gcc和g++的区别详解 来源:Linux社区 作者:stark