链接错误“未定义引用`__gxx_personality_v0'”和g ++

时间:2011-05-18 13:49:27

标签: c++ g++

  

可能重复:
  Undefined Symbol ___gxx_personality_v0 on link

我遇到以下程序的问题。

// fkt.cpp

#include "fkt.h"

int add2(int a, int b)
{
    return a+b;
}

标题:

// fkt.h

int add2(int a, int b);

现在我用以下代码编译:

g++ -c fkt.cpp

现在我运行nm并获取:

00000000 T _Z6add2ii
         U __gxx_personality_v0

当我想在任何地方使用该功能时:

(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'

我该如何解决这个问题? (我正在使用Ubuntu Linux。)

2 个答案:

答案 0 :(得分:106)

如果g++仍然出错,请尝试使用:

g++ file.c -lstdc++

看看这篇文章:What is __gxx_personality_v0 for?

确保-lstdc++位于命令的末尾。如果你把它放在开头(即在file.c之前),你仍然可以得到同样的错误。

答案 1 :(得分:61)

听起来您尝试使用gcc而不是g++与结果对象文件进行关联:

  

注意使用C ++对象的程序   文件必须始终与g ++链接,   为了提供适当的C ++   库。试图链接C ++   使用C编译器gcc的目标文件   会导致“未定义的引用”   C ++标准库的错误   功能:

$ g++ -Wall -c hello.cc
$ gcc hello.o       (should use g++)
hello.o: In function `main':
hello.o(.text+0x1b): undefined reference to `std::cout'
.....
hello.o(.eh_frame+0x11):
  undefined reference to `__gxx_personality_v0'

来源: An Introduction to GCC - for the GNU compilers gcc and g++