gcc g++的浅显区别(__gxx_personality_sj0',error: ld returned 1 exit status)

这几天不断地敲代码,终于开始要用C++开始做题了。由于之前一直是用IDE写的C++代码,我从没有 在命令行里编译过c++程序。昨天晚上我用c++改写了dfs的一个程序,准备用gdb看看调用栈情况。当我在命令行写入gcc dfs.cpp -g时,编译竟然失败。

如下:

C:\Users\zhangliang\Desktop\acm\基础算法\搜索\dfs\油田>gcc dfs.cpp -g
C:\Users\zhangliang\AppData\Local\Temp\ccG2uThB.o: In function `main':
C:\Users\zhangliang\Desktop\acm\基础算法\搜索\dfs\油田/dfs.cpp:8: undefined refe
rence to `__gxx_personality_sj0'
collect2.exe: error: ld returned 1 exit status

我就奇怪了,什么鬼?程序在IDE可以编译,gcc为什么不可以编译.我就去网上查,后来我才明白为什么。以下是我认为网上比较好的答案,我重新整理了一下,让思路更清晰一些。

1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序。


2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了,这就给人一种错觉,好像cpp程序只能用g++似的。
 
3:编译可以用gcc/g++,而链接可以用g++或者gcc -lstdc++。因为gcc命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。但在编译阶段,g++会自动调用gcc,二者等价。


所以我们只要在命令行中敲入gcc dfs.cpp -lstdc++ -g 即可 ,或者干脆直接 g++ dfs.cpp -g (-g是因为我要进行gdb调试,如果只是编译的话,不加也可以)。  PS:如果还有什么疑问,请在评论中讲出。


你可能感兴趣的:(C++,gdb,gcc)