我使用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与三个功能initcleanupbar暴露我类(这里只是最小玩具类作为一个例子)的功能。

当我尝试加载共享库(使用dyn.load R)我得到一个错误:

unable to load shared library 'test.so':
test.so: undefined symbol: _ZN3FooD2Ev

因此,它似乎无法找到Foo构造。我在做什么错了,这可怎么固定?

更新的:谢谢,jbar!因此,它是Foo的structor。我能知道这在错误信息的神秘符号:_ZN3FooD2Ev?是否站在DFooD的析构函数?

有帮助吗?

解决方案

我们不能声明纯虚析构函数。即使虚析构函数被声明为纯的,它必须执行一个空体(至少)为析构函数。

其他提示

  

UPDATE:那么这是富析构函数。我能知道这在错误信息的神秘符号:_ZN3FooD2Ev?确实站在食物d为析构函数?

可以使用该程序的C ++ FILT。

所以C ++ FILT _ZN3FooD2Ev返回 “富::〜富()”。

Regardring您的更新, “_ZN3FooD2Ev” 是 “富::〜富()” 错位

查阅 “还原函数” 的节目。

scroll top