gcc和g++到底有什么区别?
2007年8月9日
今天编译一个很普通的C++程序,如下:
1 #include 《iostream》
2
3 void function1(){
4 for(int i=0;i<1000000;i++);
5 }
6
7 void function2(){
8 function1();
9 for (int i=0;i<2000000;i++);
10 }
11
12 void function3(){
13 function1();
14 function2();
15 for (int i=0;i<3000000;i++);
16 function1();
17 }
18
19 int main(){
20 for(int i=0;i<10;i++)
21 function1();
22
23 for (int i=0;i<5000000;i++);
24
25 for(int i=0;i<10;i++)
26 function2();
27 for(int i=0; i<13;i++);
28 {
29 function3();
30 function2();
31 function1();
32 }
33 }
编译命令行: gcc -pg -o sample3 sample3.cpp
结果是:
/tmp/cck9wDpZ.o: In function `__static_initialization_and_destruction_0(int, int)':
sample3.cpp:(.text+0x12c): undefined reference to `std::ios_base::Init::Init()'
/tmp/cck9wDpZ.o: In function `__tcf_0':
sample3.cpp:(.text+0x183): undefined reference to `std::ios_base::Init::~Init()'
/tmp/cck9wDpZ.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
以前因为工作内容的关系,没用gcc编译过c++的代码。或者是其他同事已经写好了Makefile,没怎么关心过这个问题。不过以前和一个同事争论过,他说c++的代码必须要用g++编译,否则编译不过去,因为gcc是编译c code的,而g++才是编译c++的。我当时就知道肯定不对,因为gcc是gnu compiler collection的缩写,而不是gnu C compiler。理论上所有的gcc支持的不同语言的代码都可以用gcc编译(如果我错了请纠正我)。当时没空争论这个问题,结果今天自己碰上了
。google了一下,又试了试,确实用g++可以编译过去
g++ -pg -o sample3 sample3.cpp
不服不服,继续尝试发现用gcc也可以,不过要加上指定的标准c++库
如下:
gcc -pg -o sample3 sample3.cpp -lstdc++
所以,gcc是可以编译c++ 代码的,g++不过是隐含链接某些库
分类: saving