编译器GCC与G++的区别
前言
笔者酝酿很久,想写点东西,但一直未付出实践。近期因疫情被关在家,正好捡起做完。笔者当前做的项目要在不同操作系统平台下运行程序,须采用交叉编译完成。索性就谈谈编译器这部分。
GNU Compiler Collection(GCC)
GNU编译器集合(GCC)是用于编程的编译器集合,如c++、C、Objective-C、Java和Fortran。GCC版本是通过一个通过命令行操作的自由软件基础来实现的。GCC开发是由Richard Stallman作为GNU项目的一部分进行的。
对于每一种编程语言,GCC 包含其独立的程序。在GCC中,所有语言都有一个共同的内部结构,该结构由一个特定于语言的前端组成,该前端解析程序并生成一个抽象语法树和后端。
GCC也包含了ANSI C编译器里的所有特性。这个编译器允许多个级别的源代码错误检查,这些检查通常由其他工具提供。它还对结果对象代码和调试信息执行许多类型的优化。
GCC是许多操作系统的主要编译器。由于GCC是自由可获得的软件,因此许多的软件也是基于GCC。上述的这类软件主要包括用C创建并通过GCC编译的软件。
在众多的国家中,GCC由一个多样化的团体来维护,而变化则由一个委员会来管理。这一原则为大家提供了优秀的编译器,可以在某些体系结构和各种环境下工作。GCC还增加了更多的语言、优化、目标,并提高了调试周期的速度。
GCC有各种各样的体系结构指令集,广泛用作开发自由软件和专有软件的工具。它也可用于嵌入式系统,并适用于各种平台。
GCC有许多拓展GCC编译器的插件。通过插件,开发人员可以在Gimple表示层上添加、替换或删除中间端传递操作系统。GCC的Python插件从编译器内部调用任意的Python脚本。MELT插件允许高级Lisp语言扩展GCC。
对于C语言的编译,GCC编译器使用以下命令:
gcc program.c -o targetFile
这里program.c是C源文件名,其中 targetFile 是执行的目标文件 (二进制文件)。
GNU C++ Compiler(G++)
GNU提供了C++的优化编译器,也就是众所周知的G++。它可以在各种处理器上运行,大家可以在Emacs下找到完整的文档。与GCC一样,G++包含独立的程序。通过这个编译器,所有的语言都使用通用的内部结构,该结构由特定于语言的前端组成,前端解析程序并创建抽象语法树和后端。
G++主要用于编译C++编程语言。它是不同操作系统(如Linux、BSD和MAC OS x)中的主编译器。它是免费提供的软件,支持许多用c++编程语言创建并使用g++编译的自由软件。
如果您想编译C++文件,那么您将需要使用包含C++代码的文件名的G++编译器。如果您的文件不包含任何错误,那么它将成为可执行文件。
g++是强大的编译器,为您提供了许多可能的选项。G++浏览文档部分,并从命令提示符中查看您的g++版本附带的文档
GCC和g++之间的主要区别是文件名扩展名。gcc将. C文件视为C文件,而g++同时将. C和cpp文件视为c++文件
在编译阶段,G++调用GCC,因此G++是完整的编译器,而不是任何其他编译器的预处理器。这个编译器从源代码构建目标代码,它不生成程序的任何中间C版本。g++是一个完整的编译器,具有不同的前端,并调用相同的后端。
在编译c++程序时,GCC在默认情况下是不链接的,假设您需要使用-Istdc ++命令进行链接。默认情况下,g++会自动链接到c++库。
为了编译c++程序,g++使用以下命令
g++ program.cpp –o targetFile
这里program.cpp是c++源文件名,targetFile 是执行的目标文件。
参考文献: