в приложении, которое я пишу, я динамически загружаю объекты из общей библиотеки, которую я написал.
Это прекрасно до того момента, когда в игру вступают виртуальные функции.Это означает, что я могу легко вызывать методы получения и установки, но я сразу получаю ошибку сегментации при попытке вызвать функцию, которая перезаписывает функции виртуального базового класса.В настоящее время у меня заканчиваются идеи, так как это происходит с каждым классом (иерархией) в моем проекте.
Функции могут быть успешно вызваны при создании объектов внутри приложения, без использования динамической загрузки или общих библиотек вообще..
Я подозреваю либо концептуальную ошибку, либо какую-то ошибку компиляции / компоновки на моей стороне.
Иерархия классов выглядит примерно так:
BaseClass.h:
class BaseClass : public EvenMoreBaseClass {
public:
virtual bool enroll(const shared_ptr<string> filepath) = 0;
}
Производные.h:
class Derived : public BaseClass {
bool enroll(const shared_ptr<string> filepath);
}
Производные.cpp:
bool Derived::enroll(const shared_ptr<string> filepath) {
cout << "enroll" << endl;
}
(включает и пространство имен здесь опущено)
Приложение загружает библиотеку и получает (общий) указатель на объект BaseClass (приложение включает BaseClass.h).Все функции могут быть выполнены, кроме виртуальных.
Разработка выполняется в Eclipse CDT.В настоящее время все находится в одном проекте с различными конфигурациями сборки (.cpp приложения отключен в конфигурации общей библиотеки и наоборот).Компилятор g ++ 4.4.Все .o файлы иерархии связаны с библиотекой, установлен -shared.
Буду очень признателен за любую помощь.