在C ++共享库基类未定义的符号错误
-
12-09-2019 - |
题
我使用g++ -shared ...
编译下面的代码作为共享库:
class Foo {
public:
Foo() {}
virtual ~Foo() = 0;
virtual int Bar() = 0;
};
class TestFoo : public Foo {
public:
int Bar() { return 0; }
};
extern "C" {
Foo* foo;
void init() {
// Runtime error: undefined symbol: _ZN3FooD2Ev
foo = new TestFoo(); // causes error
}
void cleanup() { delete(foo); }
void bar() { foo->Bar(); }
}
在点是作为一个简单的C
API与三个功能init
,cleanup
和bar
暴露我类(这里只是最小玩具类作为一个例子)的功能。
当我尝试加载共享库(使用dyn.load
R
)我得到一个错误:
unable to load shared library 'test.so':
test.so: undefined symbol: _ZN3FooD2Ev
因此,它似乎无法找到Foo
构造。我在做什么错了,这可怎么固定?
更新的:谢谢,jbar!因此,它是Foo
的解的structor。我能知道这在错误信息的神秘符号:_ZN3FooD2Ev
?是否站在D
的FooD
的析构函数?
解决方案
我们不能声明纯虚析构函数。即使虚析构函数被声明为纯的,它必须执行一个空体(至少)为析构函数。
其他提示
UPDATE:那么这是富析构函数。我能知道这在错误信息的神秘符号:_ZN3FooD2Ev?确实站在食物d为析构函数?
可以使用该程序的C ++ FILT。
所以C ++ FILT _ZN3FooD2Ev返回 “富::〜富()”。
Regardring您的更新, “_ZN3FooD2Ev” 是 “富::〜富()” 错位一>
查阅 “还原函数” 的节目。
不隶属于 StackOverflow