【转贴】GCC-the GNU Complier Collection

整理了网上对gcc g++ cc的一些解释,相信不清楚这三者关系的朋友看完这个就会明白的.

 

早期的gcc是指gnu c/c++ compiler.现在是指gnu compiler collection,包含c/c++和其它很多编译器.主要应用在*UIX系统中,现在最新版本是GCC 4.2.0.

 

The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Java, and Ada, as well as libraries for these languages (libstdc++, libgcj,...).

 

具体内容及介绍请参看http://www.gnu.org/software/gcc/

 

而且gcc现在也有for windows平台的.比如: Dev-C++是基于gcc/g++的windows移植版本的IDE(integrated   development   environment),集成了编辑器、编译器、调试器等功能.

 

还有MinGW gcc ,它编译生成的文件由标准的 MS C 运行库支持,是道地的 Win32
本地程序,执行效率高.Win32 的 GIMP 和 GTK2 就可由 MinGW gcc 编译完成.实际使用中, MinGW gcc 编译质量与 MS C/C++ 13.x 编译器(包含于 VS 6)接近, 优于一些商业编译器.
除了可以编译 C C++ 代码外,MinGW gcc 还包括 objective-c, Fortran 77 ,Ada 95,Pascal(gpc) 编译前端. 最新版本 3.2.

 

而g++是gcc的nickname.当我们使用gcc时候,gcc将根据后缀来调用相应的编译器c、c++或ada等.
一般c程序就用gcc编译,c++程序就用g++编译.
如果加上 -x c 选项时,强制调用c编译器,-x c++调用c++编译器

 

gcc is c compiler (这个通用)
g++ is c++ compiler
gcj is java compiler
gnat is ada compiler

glibc就是编译gcc要调用的标准C函数的库,g++ 和libstdC++关系也类似gcc和glibc的关系


C++的编译器肯定可以编译C的的代码,注意除了C++对C的语法扩充之外,编译和链接C和C++的标准库通常也不一样。用gcc而非g++也可以编译C++的程序就证明了这一点。其实gcc和g++只不过是个命令,他们编译的各个步骤中调用的东西都一样,只有最后一步确定要连接那些库才会不同。

 

g++生成的目标文件的符号表内的符号比用gcc生成的要多出几个字母,所以如果程序代码中同时含c和c++程序,那么要么全用c++编译器进行编译,要么在用g++编译的程序内引用的c函数的声明用extern "C"{ 和 }包含起来。另外,如果用g++编译了某部份,那么连接是最好用g++(因为g++可能在编译时加入了一些代码,而该代码是对c++相关库的引用,所以此时用gcc连接的话会出现某些符号未定义的错误)。

 

posix标准里面的标准C编译器是cc.至于每个系统把cc链接成什么,还要看具体情况.一般的商业UNIX都有自己的cc,不过大都支持gcc,也就是说可以在上面装个gcc,一般而言,应该是自带的比较好一些(可以发挥硬件特性),可以理解gcc是GNU的cc.
Linux: gcc/g++
Solaris: cc/CC
HP-UX: aCC
AIX: xlc/xlC
SCO: ?/?
Intel的icc

 

几乎所有的情况, C/C++ compiler 都只是front end driver. 后面的编译器是一样的. 比如gcc, g++ 提供不同的选项给编译器以及link editor. 这些包括用户选项, 缺省选项, 对应的缺省系统库. 每个compiler有一个configuratoin file来指定这些缺省选项. 使用 verbose mode (-v) 可以看到这些内容.C++ 程序因为语法(namespace, class, overload...), 需要mangle 所有的symbol name. 与C程序link的时候需要用extern "C".

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值