关于gcc与g++
gcc与g++有什么区别? 问题点数:20、回复次数:33Top
1 楼hqx8211()回复于 2006-11-21 09:50:13 得分 0
gcc是C编译器,支持C99标准。(当然看gcc版本,很老的版本可能只支持C89标准)。
g++是C++编译器,兼容C标准。
编译纯C源程序项目,尽量用gcc;编译C++项目,只能用g++.Top
2 楼daliu669()回复于 2006-11-21 09:59:15 得分 0
但我的书上怎么写的gcc也可以编译c++程序呢?Top
3 楼ocor()回复于 2006-11-21 10:05:33 得分 0
GCC stands for “GNU Compiler Collection”. GCC is an integrated distribution of compilers for several major programming languages. These languages currently include C, C++, Objective-C, Objective-C++, Java, Fortran, and Ada.
g++ is a program that calls GCC with the default language set to C++, and automatically specifies linking against the C++ library. On many systems, g++ is also installed with the name c++.
more infor:
http://gcc.gnu.org/
Top
4 楼hqx8211()回复于 2006-11-21 10:06:50 得分 0
try.
写一个c++程序,用gcc编译一下,看看有什么后果。
[09:34:09@fedora ~/test]$gcc test.cpp
/tmp/ccJJIVjC.o(.text+0x19): In function `A::A()':
test.cpp: undefined reference to `std::cout'
/tmp/ccJJIVjC.o(.text+0x1e):test.cpp: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/tmp/ccJJIVjC.o(.text+0x29):test.cpp: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
/tmp/ccJJIVjC.o(.text+0x2f):test.cpp: undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
/tmp/ccJJIVjC.o(.text+0x3c):test.cpp: undefined reference to `operator new[](unsigned int)'
/tmp/ccJJIVjC.o(.text+0x67): In function `A::A()':
test.cpp: undefined reference to `std::cout'
/tmp/ccJJIVjC.o(.text+0x6c):test.cpp: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/tmp/ccJJIVjC.o(.text+0x77):test.cpp: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
/tmp/ccJJIVjC.o(.text+0x7d):test.cpp: undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
/tmp/ccJJIVjC.o(.text+0x8a):test.cpp: undefined reference to `operator new[](unsigned int)'
/tmp/ccJJIVjC.o(.text+0xb5): In function `A::~A()':
test.cpp: undefined reference to `std::cout'
/tmp/ccJJIVjC.o(.text+0xba):test.cpp: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/tmp/ccJJIVjC.o(.text+0xc5):test.cpp: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
/tmp/ccJJIVjC.o(.text+0xcb):test.cpp: undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
/tmp/ccJJIVjC.o(.text+0xe7):test.cpp: undefined reference to `operator delete[](void*)'
/tmp/ccJJIVjC.o(.text+0x108):test.cpp: undefined reference to `operator delete(void*)'
............Top
5 楼sqs570408(流氓总督)回复于 2006-11-21 10:13:09 得分 20
gcc和g++都是GNU(组织)的一个编译器。
误区一:gcc只能编译c代码,g++只能编译c++代码
两者都可以,但是请注意:
1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。C++的语法规则更加严谨一些。
2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了,这就给人一种错觉,好像cpp程序只能用g++似的。
误区二:gcc不会定义__cplusplus宏,而g++会
实际上,这个宏只是标志着编译器将会把代码按C还是C++语法来解释,如上所述,如果后缀为.c,并且采用gcc编译器,则该宏就是未定义的,否则,就是已定义。
误区三:编译只能用gcc,链接只能用g++
严格来说,这句话不算错误,但是它混淆了概念,应该这样说:编译可以用gcc/g++,而链接可以用g++或者gcc -lstdc++。因为gcc命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。但在编译阶段,g++会自动调用gcc,二者等价。
学习!Top
6 楼hqx8211()回复于 2006-11-21 10:22:18 得分 0
楼上的标准答案。以前看过,当时觉得没必要对工具区分那么清楚,又忘了。再学习一次。Top
7 楼wzzww(无知者无畏)(此人已死)回复于 2006-11-21 11:39:32 得分 0
我记到blog中,免得又忘了,又不知道去哪找
不过一般这种问题,只是找工作的时候面试会被问到了,实际工作中极少涉及到,因为你写C++代码时自然就用.cpp为后缀名,C代码就用.c,编译时也一样自然而然的c代码用gcc编译,c++代码用g++编译。Top
8 楼hyg2008(蓝色雨)回复于 2006-11-21 12:22:12 得分 0
markTop
9 楼pilixuanke(轩客)回复于 2006-11-21 13:01:25 得分 0
呵呵,学习^_^Top
10 楼lsyzl(海绵)回复于 2006-11-21 15:47:51 得分 0
markTop
11 楼weichen2005(md)回复于 2006-11-22 11:32:08 得分 0
mark.
Top
12 楼jronald(深白色)回复于 2006-11-22 11:34:01 得分 0
够详细的
g++把.c当.cpp编译好像没道理啊
听说gcc本身在编译时指定支持C++,然后就可以用gcc编译C++了。
如果是这样,就不理解了,g++编译时调用了gcc,但gcc如果不支持C++编译呢?问题是g++总是可以编译C++的。Top
13 楼lqh_wh(liqh)回复于 2006-11-22 11:52:43 得分 0
如果采用gcc编译c++的程序,需要加入-lstdc++Top
14 楼irplay(www.irplay.com)回复于 2006-11-22 12:53:30 得分 0
学习
没有blog只好记在论坛上Top
15 楼yanran_hill(燕然)回复于 2006-11-22 15:36:11 得分 0
使用gcc编译C++的话,应该加上-lstdc++标志,不然可能会找不到一些c++需要的连接库函数Top
16 楼m2213231()回复于 2006-11-22 19:54:57 得分 0
顶楼上的,补充一下,如果使用gcc编译.cpp的文件的话还应该加上"-x c++"
Ex: "gcc -x c++ -o test.cpp test.exe -lstdc++"Top
17 楼HoBoss(学徒)回复于 2006-11-22 20:43:23 得分 0
markTop
18 楼OnlyAlone()回复于 2006-11-22 21:51:08 得分 0
markTop
19 楼wangxiao_cdut()回复于 2006-11-22 22:03:07 得分 0
那个地方可以下载到,g++哦?Top
20 楼wadefelix(流浪者幸运)回复于 2006-11-22 22:22:44 得分 0
gcc and GCC is not the same thing
by POORENGLISHTop
21 楼jiangkeredgirl(地狱卐小怪)回复于 2006-11-23 08:43:42 得分 0
markTop
22 楼Could(翻墙鹦鹉)回复于 2006-11-23 09:08:02 得分 0
mark2Top
23 楼sjjf(水晶剑锋)回复于 2006-11-23 10:14:25 得分 0
markTop
24 楼lxhtzy(天之翼)回复于 2006-11-23 11:13:08 得分 0
学习Top
25 楼sunwhite()回复于 2006-11-23 13:26:54 得分 0
学习ingTop
26 楼PLYAT(山野的風)回复于 2006-11-23 17:06:55 得分 0
靠,一大早就给我发信息说你的帖子上热贴榜了!
来DD!Top
27 楼kelven2004()回复于 2006-11-23 22:45:32 得分 0
学习ING~~~Top
28 楼lgd3r()回复于 2006-11-24 09:23:08 得分 0
学习!!Top
29 楼Tycool(Xuco)回复于 2006-11-24 10:10:19 得分 0
好帖啊,学习。Top
30 楼VCLIFE(linux&&qt)回复于 2006-11-24 12:20:22 得分 0
g++ 是gcc一部分Top
31 楼vlient(小游)回复于 2006-11-27 23:38:09 得分 0
markTop
32 楼evawu999(小九)回复于 2006-11-28 10:57:49 得分 0
mark
Top
33 楼Java_java2005(深圳代码工)回复于 2006-11-30 10:02:55 得分 0
markTop




