赞
踩
使用Linux系统的编译c或者c++的人,都知道Linux系统的编译器有cc\gcc\g++\c++,但是他们之间到底是什么关系呢?
首先到系统的/usr/bin路径下,使用命令:ll | grep cc,可以看到如下:
由此,可以知道LInux系统下,cc就是gcc。
关于c++和g++也都在/usr/bin路径下,查看c++和g++的信息如下:
两个文件的大小是一样的,再进一步通过命令:diff c++ g++, 结果如下:
两个文件的内容也是一样的。所以,c++就是g++。至于为什么是两个文件,而不是使用连接,这个就不知道了。
那么看上去四个编译器,现在本质上只剩下两个了,也就是gcc和g++。
通过名字就很容易猜想到:gcc是编译c语言的,g++是编译C++语言的。其实非也。你也可以通过gcc -xc++ -lstdc++ -shared-libgcc也编译c++源代码。gcc和g++其实只是个外壳,在编译的时候,最终决定是调用后台的cc1还是cc1plus。编译的语言是可以通过编译选项-x来指定。
那么gcc和g++主要的区别是:编译时自动连接的库的不同。g++会自动连接std c++的库,而gcc不会。所以,使用gcc编译c++的代码,如果c++的代码中使用了std的类,例如:vector,会出现连接出错。
g++还有一个不同就是编译cpp文件时,会有一些预定义的宏:
- #define __GXX_WEAK__ 1
- #define __cplusplus 1
- #define __DEPRECATED 1
- #define __GNUG__ 4
- #define __EXCEPTIONS 1
- #define __private_extern__ extern
总之,不管如何,既然已经分为gcc和g++了,尽量用gcc编译C语言程序,使用g++编译c++程序;如果有的程序是两种语言混合的,那就只能使用g++了,对于c语言,可以使用extern “C” 来标识,让编译把他当做c语言来编译即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。