У нас большая база кода в C ++, и после небольшого рефакторинга (добавлен один класс и переписаны некоторые связанные методы) мы начали получать ошибки компоновщика в GCC 3 и 4. В частности, ошибки компоновщика были «пропущены ссылки на не виртуальные».спасибо »в небольших примерах программ, которые подклассируют классы в нашем большом SDK.
Поиск в Интернете не дал много подсказок, кроме некоторых старых ошибок GCC, которые, похоже, были устранены.
АтрибутыКажется, проблема в следующем:
- GCC 3.4.6 и 4.3.3, оптимизация с
-O2
- Множественное наследование, включая случайное виртуальное наследование.
- ИзменениеПорядок наследования, скажем, от
class Foo: public A, public B {}
до
class Foo: public B, public A {}
для классов, в которых отсутствует thunks, "решает" проблему.
Виртуальное наследование появляется тольков одном, очень часто используемом базовом классе для подсчета ссылок.Я убедился, что каждое использование этого класса действительно является виртуальным публичным, а не просто публичным наследованием случайно.
Очевидно, что манипулирование с порядком наследования не решает проблему на самом деле.Что еще это может быть?