Russian Qt Forum

Qt => Общие вопросы => Тема начата: Hrundel от Сентябрь 09, 2013, 17:05



Название: QPluginLoader не возвращает объект через instance()
Отправлено: Hrundel от Сентябрь 09, 2013, 17:05
Всем привет,
не могу понять почему при портировании на линух перестали работать либы
пытаюсь прочитать либу также как в винде

Код:
    loader = new QPluginLoader("libaddpublic.so", this);

    if(loader)
    {
        if(loader->instance())
        {
            AddPublicHostInterface* addPublicDialog = qobject_cast<AddPublicHostInterface*>(loader->instance());
            addPublicDialog->showDialog();
        }
        else
        {
            qDebug() << "Root object wasn\'t loaded";
        }
    }
    else
    {
        qDebug() << "File wasn\'t loaded";
    }

получаю ноль от loader->instance()
нужно под линухом что-то дополнительно прописывать чего нет под виндой?


Название: Re: QPluginLoader не возвращает объект через instance()
Отправлено: Serr500 от Сентябрь 09, 2013, 21:35
А что возвращает QPluginLoader::errorString()?


Название: Re: QPluginLoader не возвращает объект через instance()
Отправлено: Hrundel от Сентябрь 10, 2013, 08:52
пишет "Cannot load library /home/nus/libaddpublic.so: (/home/nus/libaddpublic.so: undefined symbol: _ZTI22AddPublicHostInterface)"


Название: Re: QPluginLoader не возвращает объект через instance()
Отправлено: Fregloin от Сентябрь 10, 2013, 11:11
ну вот и понятно в чем дело, тщательно проверьте все интерфейсы, qmake еще раз принудительно запустите. такое часто бывало, когда например было описание слота, но отсутствовала реализация и т.п. кстати какая версия qt? в 5й изменился механизм описания интрефейсов плагинов.