crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> Ни как не могу слинковать.
Гость_Гость_heiheshang_*_*
сообщение 7.11.2009, 16:36
Сообщение #1





Гости








    


Проблема в следующем, ни как не могу слинковать код. В qtcreator есть библиотека libDuiEditor. Я ее подключаю к своему проекту. Код компилируется, но линковщик в упор не хочет видеть этот модуль.
undefined reference to `DuiEditor::Internal::DuiEditorPlugin::DuiEditorPlugin()

Может я чего-то не понимаю ?
DuiEditor::Internal::DuiEditorPlugin *plugin =new DuiEditor::Internal::DuiEditorPlugin();

Вот код самого модуля
#ifndef DUIEDITORPLUGIN_H
#define DUIEDITORPLUGIN_H

#include <extensionsystem/iplugin.h>

namespace TextEditor {
class TextFileWizard;
class TextEditorActionHandler;
} // namespace TextEditor

namespace DuiEditor {
namespace Internal {

class DuiEditorFactory;
class DuiCodeCompletion;
class ScriptEditor;

class DuiEditorPlugin : public ExtensionSystem::IPlugin
{
    Q_OBJECT

public:
    DuiEditorPlugin();
    virtual ~DuiEditorPlugin();

    // IPlugin
    bool initialize(const QStringList &arguments, QString *errorMessage = 0);
    void extensionsInitialized();

    static DuiEditorPlugin *instance()
    { return m_instance; }

    void initializeEditor(ScriptEditor *editor);

private:
    void registerActions();

    static DuiEditorPlugin *m_instance;

    typedef QList<int> Context;
    Context m_context;
    Context m_scriptcontext;

    TextEditor::TextFileWizard *m_wizard;
    DuiEditorFactory *m_editor;
    TextEditor::TextEditorActionHandler *m_actionHandler;
    DuiCodeCompletion *m_completion;
};

} // namespace Internal
} // namespace DuiEditor

#endif // DUIEDITORPLUGIN_H
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 7.11.2009, 16:59
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Покажи .pro файл.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_heiheshang_*_*
сообщение 7.11.2009, 17:08
Сообщение #3





Гости








    


Цитата(SABROG @ 7.11.2009, 16:59) *
Покажи .pro файл.

LIBS += -lDuiEditor

Вас этот момент интересует ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
frg10
  опции профиля:
сообщение 8.11.2009, 4:06
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 8.11.2009
Из: Ростов-на-Дону
Пользователь №: 1213

Спасибо сказали: 5 раз(а)




Репутация:   2  


Цитата(Гость_Гость_heiheshang_*_* @ 7.11.2009, 16:36) *
Может я чего-то не понимаю ?
DuiEditor::Internal::DuiEditorPlugin *plugin =new DuiEditor::Internal::DuiEditorPlugin();


Вроде инстансы плагинов не создаются вручную. Нужно использовать QPluginLoader. Вобщем смотри ассистант.
Еще можно попробовать добавить к описанию класса Q_DECL_EXPORT/IMPORT чтобы сделать его интерфейс видимым снаружи. Но при этом нужно будет пересобрать либу.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_heiheshang_*_*
сообщение 8.11.2009, 15:19
Сообщение #5





Гости








    


Цитата(frg10 @ 8.11.2009, 4:06) *
Цитата(Гость_Гость_heiheshang_*_* @ 7.11.2009, 16:36) *
Может я чего-то не понимаю ?
DuiEditor::Internal::DuiEditorPlugin *plugin =new DuiEditor::Internal::DuiEditorPlugin();


Вроде инстансы плагинов не создаются вручную. Нужно использовать QPluginLoader. Вобщем смотри ассистант.
Еще можно попробовать добавить к описанию класса Q_DECL_EXPORT/IMPORT чтобы сделать его интерфейс видимым снаружи. Но при этом нужно будет пересобрать либу.

Да руками не создаются, делаю так
QPluginLoader plugin("/usr/lib/libDuiEditor.so");
QObject *obj = qobject_cast<QObject *>(plugin.instance());
if (obj){
         qDebug() << "Загрузили";
         DuiEditorPlugin *dui = qobject_cast<DuiEditorPlugin *>(obj);
}

Получаем ошибку линковки
/usr/include/QtCore/qobject.h:443: undefined reference to `DuiEditor::Internal::DuiEditorPlugin::staticMetaObject'
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
frg10
  опции профиля:
сообщение 8.11.2009, 17:40
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 8.11.2009
Из: Ростов-на-Дону
Пользователь №: 1213

Спасибо сказали: 5 раз(а)




Репутация:   2  


ИМХО без правки исходников не обойтись. Дело в том, что если вы хотите использовать какой-то класс определенный в динамической библиотеке, этот класс должен из нее экспортироваться. Т.е. класс должен быть объявлен так:
class DUIEDITOR_EXPORT DuiEditorPlugin : public ExtensionSystem::IPlugin

Подробности в Creating Shared Libraries

Ну и пересобрать нужно будет этот плагин. И линковать нужно будет статически через -lDuiEditor.


А вообще, зачем вам доступ к классу DuiEditorPlugin? Если вам нужно его инициализировать, то нужно кастить его к ExtensionSystem::IPlugin. А доступ ко всем объектам, которые он предоставляет, осуществляется через ExtensionSystem::PluginManger.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_heiheshang_*_*
сообщение 8.11.2009, 19:11
Сообщение #7





Гости








    


Цитата(frg10 @ 8.11.2009, 17:40) *
ИМХО без правки исходников не обойтись. Дело в том, что если вы хотите использовать какой-то класс определенный в динамической библиотеке, этот класс должен из нее экспортироваться. Т.е. класс должен быть объявлен так:
class DUIEDITOR_EXPORT DuiEditorPlugin : public ExtensionSystem::IPlugin

Подробности в Creating Shared Libraries

Ну и пересобрать нужно будет этот плагин. И линковать нужно будет статически через -lDuiEditor.


А вообще, зачем вам доступ к классу DuiEditorPlugin? Если вам нужно его инициализировать, то нужно кастить его к ExtensionSystem::IPlugin. А доступ ко всем объектам, которые он предоставляет, осуществляется через ExtensionSystem::PluginManger.

Может сам класс мне и не нужен, главное получить его функционал,если подскажите как им воспользоваться буду благодарен.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
frg10
  опции профиля:
сообщение 8.11.2009, 23:11
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 8.11.2009
Из: Ростов-на-Дону
Пользователь №: 1213

Спасибо сказали: 5 раз(а)




Репутация:   2  


Цитата(Гость_Гость_heiheshang_*_* @ 8.11.2009, 19:11) *
Может сам класс мне и не нужен, главное получить его функционал,если подскажите как им воспользоваться буду благодарен.


Я могу вам посоветовать подробнее разобраться с архитектурой QtCreator. Мне очень помог документ Writing Qt Creator Plugin. Как понятно из названия, там описывается как писать собственные плагины, ну и параллельно разбирается архитектура. А дальше нужно просто брать исходники самого креатора и разбираться. :D Кстати, всем советую, потому что сделано все очень красиво.

P.S.
Еще могу посоветовать сгенерировать документацию по QtCreator Doxygen-ом. Очень помогает. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.11.2009, 4:17
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9648
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


heiheshang, что-то я в Git-хранилище этого DuiEditor не вижу. Может прибили уже?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_heiheshang_*_*
сообщение 9.11.2009, 7:46
Сообщение #10





Гости








    


Цитата(frg10 @ 8.11.2009, 23:11) *
Цитата(Гость_Гость_heiheshang_*_* @ 8.11.2009, 19:11) *
Может сам класс мне и не нужен, главное получить его функционал,если подскажите как им воспользоваться буду благодарен.


Я могу вам посоветовать подробнее разобраться с архитектурой QtCreator. Мне очень помог документ Writing Qt Creator Plugin. Как понятно из названия, там описывается как писать собственные плагины, ну и параллельно разбирается архитектура. А дальше нужно просто брать исходники самого креатора и разбираться. :D Кстати, всем советую, потому что сделано все очень красиво.

P.S.
Еще могу посоветовать сгенерировать документацию по QtCreator Doxygen-ом. Очень помогает. :)

Просмотр ничего не дал, так и осталось неясным как методы вызывать плагина.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 13.11.2018, 5:35