【问题标题】:Link error "undefined reference to `__gxx_personality_v0'" and g++ [duplicate]链接错误“未定义对 `__gxx_personality_v0' 的引用”和 g++ [重复]
【发布时间】:2011-08-28 02:20:34
【问题描述】:

可能重复:
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'

我该如何解决这个问题? (我使用的是UbuntuLinux。)

【问题讨论】:

  • 我们能看到你用来链接的命令行吗? (如果您还没有,也应该使用 g++ 进行链接。)
  • 你试过g++ ftk.cpp -o ftk 吗?
  • 我用 ghc 加点链接(使用 FFI)
  • 当我忘记将 Makefile 中的 gcc 更改为 g++ 时出现此错误....LOL ;)
  • 你说的“使用这个功能”是什么意思,在这种情况下你要切换到 gcc 吗?

标签: c++ g++


【解决方案1】:

如果g++ 仍然报错尝试使用:

g++ file.c -lstdc++

看这个帖子:What is __gxx_personality_v0 for?

确保-lstdc++ 位于命令末尾。如果将它放在开头(即 file.c 之前),仍然会出现同样的错误。

【讨论】:

  • 我不知道 -lstdc++ 是什么,但它帮助我为我的 jni 项目编译 .so 库。谢谢
  • 链接cpp标准库。
  • 他确定他调用的是 g++ 而不是 gcc 吗? -- 他不应该手动添加-lstdc++。
【解决方案2】:

听起来您正在尝试使用 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++

【讨论】:

  • 在使用distcc 时发生在我身上,因为它默认使用 gcc,而不是 g++。解决方法是指定编译器distcc g++ [...]
  • 添加 -fno-threadsafe-statics 解决了我在使用 Arduino Sketch 时遇到的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多