Я просто натыкался на следующую ошибку (и нашел решение онлайн, но это не присутствует в Переполнении стека):
(.gnu.linkonce. [материал]): неопределенная ссылка на [метод] [объектный файл]: (.gnu.linkonce. [материал]): неопределенная ссылка на 'typeinfo для [имени класса]'
Почему можно было бы получить один из них "неопределенная ссылка на typeinfo" ошибки компоновщика?
(Бонусные очки, если можно объяснить, что продолжается негласно.)
Если вы компонуете один .so с другим, еще одна возможность - компиляция с "-fvisibility=hidden" в gcc или g++. Если оба .so файла были собраны с "-fvisibility=hidden" и ключевой метод не находится в том же .so, что и другая реализация виртуальной функции, то последняя не увидит vtable или typeinfo первой. Для компоновщика это выглядит как нереализованная виртуальная функция (как в ответах paxdiablo и cdleary).
В этом случае вы должны сделать исключение для видимости базового класса с помощью
__attribute__ ((visibility("default")))
в объявлении класса. Например,
class __attribute__ ((visibility("default"))) boom{
virtual void stick();
}
Другое решение, конечно, не использовать "-fvisibility=hidden". Но это усложняет работу компилятора и компоновщика, возможно, в ущерб производительности кода.