"缺少非虚拟thunk"和继承顺序

Adr*_*ian 8 c++ gcc thunk

我们在C++中有一个很大的代码库,在一个小的重构(一个类添加并重写了一些相关的方法)之后,我们开始在GCC 3和4上获得链接器错误.链接器错误特别是"缺少对非虚拟thunk的引用"在我们的大型SDK中继承类的小型示例程序.

搜索网络并没有提供许多暗示,除了一些似乎已经解决的旧GCC错误之外.

问题的属性似乎是:

  • GCC 3.4.6和4.3.3优化 -O2
  • 多重继承,包括偶尔的虚拟继承.
  • 从比如说更改继承顺序,
    class Foo: public A, public B {}
    class Foo: public B, public A {}
    对缺少的thunk类"修复"的问题.

虚拟继承仅出现在一个非常常用的基类中,用于引用计数.我已经证实,这个类的每个用法都是虚拟公共的,而不仅仅是公共继承.

显然,摆弄继承顺序并不能解决问题.还有什么呢?

小智 0

可能是钻石的问题

如果是这样检查这个线程