2011-05-18 134 views
64

可能重复:
Undefined Symbol ___gxx_personality_v0 on link链接错误 “未定义参考`__gxx_personality_v0' ”和g ++

我有下面的程序中的问题。

// 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' 

我该如何解决这个问题? (我使用的Linux Ubuntu

+1

我们可以看到您用来链接的命令行吗? (如果你还没有,你应该用'g ++'来做链接。) – Rup 2011-05-18 13:52:37

+0

你尝试过'g ++ ftk.cpp -o ftk'吗? – karlphillip 2011-05-18 13:53:20

+0

我使用ghc(使用FFI)连接 – develhevel 2011-05-18 14:39:38

回答

94

如果g++仍给出错误尝试使用:

g++ file.c -lstdc++ 

看这篇文章:What is __gxx_personality_v0 for?

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

+0

我不知道-lstdC++是什么,但它帮助我为我的jni项目编译.so库。谢谢 – Hoto 2014-02-14 09:40:19

+4

它链接cpp标准库。 – phoxis 2014-02-14 09:42:52

+0

他确定他在调用g ++而不是gcc? - 他不应该手动添加-lstdC++。 – 2016-06-23 18:19:18

56

这听起来像你想与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++

+0

使用[distcc]时发生了(https ://github.com/distcc/distcc/blob/master/README.md),因为它默认使用gcc,而不是g ++。解决方案是指定编译器'distcc g ++ [012]''''''''' – jotrocken 2015-10-02 13:55:51

+0

添加-fno-threadsafe-statics使用Arduino Sketch解决了我的问题。 – Soundararajan 2015-12-19 08:34:56