August 09, 2007

gcc和g++到底有什么区别?

今天编译一个很普通的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++不过是隐含链接某些库 Posted by hufey at August 9, 2007 03:05 PM
Comments