LINUX.ORG.RU

Ошибка при линковке undefined reference to `vtable for classX'


0

0

Тема такая: Есть абстрактный класс, одна из реализаций этого класса скомпилирована как shared object (Для линковки используется следующая команда: g++ -shared -o libclassX1.so <список *.o файлов> -L<...> -l<...>). При линковке основной программы, использующей этот класс(g++ -o main_prog <список объектников> -L<...> -l<...>) вываливаются следущие ошибки типа: .obj//main.o(.text+0x5b21): undefined reference to `ClassX1::method1(...) ... .obj//main.o(.gnu.linkonce.t._ZN18ClassX1C1Ev+0x1a): undefined reference to `vtable for ClassX1'. С реализацией всё нормально, т.к. под win32 это дело нормально собирается и работает. Что не так? Предполагаю, что указываю неверную команду для сборки библиотеки. Заранее спасибо.

Кажется, так бывает, когда один (или больше) из методов абстрактного класса забыли пометить как чистую виртуальную функцию.

anonymous
()
Ответ на: комментарий от anonymous

Все абстрактные функции объявлены правильно, к тому же при линковке выдаются ошибки "undefined reference" для невиртуальных функций класса.

andreyk
() автор топика
Ответ на: комментарий от andreyk

Мое мнение что проблема в приоритетах объектников при линковке. Последним должен быть самый зависимый, но я могу ошибаться, года 4 назад такая трабла была, но деталей уже не помню

mumg
()
Ответ на: комментарий от anonymous

У меня такое вылезает если у класса есть мембер которого
1. не юзают
2. определён в классе
3. для него нет функции

т.е.

class foo {
foo();
};

И foo::foo() нигде не определено как функция собственно.

ms
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.