我遇到以下程序的问题。
// 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。)
答案 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++