(一)注意:是c程序。
很不幸地,我遭遇这个问题让我花去了一两个小时去找它的原因。在VC甚至TC2.0下编译都没有什么问题的c代码,到了gcc就出了这么一条错误,实在是让人郁闷。
网上查了一下,没解决问题。只知道“__gxx_personality_v0”的错误信息表示试图用gcc编译c++的代码而产生错误。网上给出的解决方案多是在编译时加上“-lstdc++”参数,也就是把gcc当作g++来用。但这显然不是我想要的,加上“-lstdc++”参数编译出的目标文件几乎肥了一倍,没理由一个c程序偏按c++编译。我仔细检查,程序中并没有什么c++的代码;而且c++的代码大概也通不过TC2.0吧。于是乎,就无可救药地再次开始怀疑编译器,唉……最后在博客oliliango.cublog.cn的一篇文章上找到了答案:“__gxx_personality_v0这样的编译错误,是由于源代码的文件后缀名和代码的语法不相符合,比如用C的语法的文件,选择了cpp这样的后缀名(或者<大写C>这样的后缀名)”。一检查,果然,因为源代码使用TC编辑过,所以文件名全转换成了大写,所以就出毛病了。
(二)
1. Linux Develop Notes
编译 c++ 程序需要添加 -lstdc++ sample: gcc -lstdc++ -o test test.c,否则会报 "undefinedreference to '__gxx_personality_v0' " 错误
2. 唉,用gcc命令编译C程序,用g++命令编译C++程序。
g++和gcc本质一样的,本质上还是gcc,我们实验室所有的c++程序都是用gcc编译的,一般的程序用gcc足够了。 对于 C++ 程序,编译的时候用 gcc 或者 g++ 都可以。但是在进行连接的时候最好用 g++,因为用 g++ 会自动进行 C++ 标准库的连接;用 gcc 连接 C++ 程序也可以,但是需要人为指定连接 C++ 标准库,否则就会出现 undefined reference to `__gxx_personality_v\0' 之类的错误。
可见-lstdc++ 所对应的是标准C++库。