Название: [qt-4.4.0 Linux] Работа с плагинами - начало. Отправлено: izoomer от Май 21, 2008, 17:36 Решил кое какие вещи в проекте перевести на плагины со статической линковкой и сразу уперся. Все сделал как в plugendpaint а он ругается. Для эксперимента все пустое.
Вот сам плагин : JMediaPlayerPlugin.h Код: #ifndef JMEDIAPLAYERPLUGIN_H JMediaPlayerPlugin.cpp Код: #include <QtGui> JMediaPlayer.h Код: #ifndef JMEDIAPLAYER_H .pro Код: TEMPLATE = lib в главном проекте в main.cpp Код:
в .pro файл проекта добавил строку LIBS += -L../libjplayer/JMediaPlayerPlugins/src -ljmediaplayer . а он при компиляции ругается ... Код: main.o: In function `__static_initialization_and_destruction_0(int, int)': В асистенте все перечитал , примеры все персмотрел , форум читал ... все вроде сделано правильно а нехочет компилится. Уже и пересобирал весь проект несчетное количесвто раз. подскажите что не так . Название: Re: [qt-4.4.0 Linux] Работа с плагинами - начало. Отправлено: lit-uriy от Май 21, 2008, 18:34 дык, при статической линковке, плагины курят бамбук, читай руководство Развертывание приложений Qt (http://crossplatform.ru/documentation/qtdoc4.3/deployment.php)
Название: Re: [qt-4.4.0 Linux] Работа с плагинами - начало. Отправлено: ритт от Май 21, 2008, 18:40 при статической линковке плагины можно линковать только статически (круг круглый)...т.е. это и не плагины вовсе уже будут, но их можно будет увидеть в списке статических плагинов (курить QLibrary/QPlugin)
в ассистанте всё это есть Название: Re: [qt-4.4.0 Linux] Работа с плагинами - начало. Отправлено: izoomer от Май 21, 2008, 21:01 при статической линковке плагины можно линковать только статически (круг круглый)...т.е. это и не плагины вовсе уже будут, но их можно будет увидеть в списке статических плагинов (курить QLibrary/QPlugin) в ассистанте всё это есть подскажите мне дальнейший шаг ... я так понимаю что надо пересобрать все QT динамически . Правильно ? или мне надо только что то настроить в pro файле проекта ? P.S. QT собиралось по умолчанию . Название: Re: [qt-4.4.0 Linux] Работа с плагинами - начало. Отправлено: ритт от Май 21, 2008, 21:15 убрать static из проект{а,ов} - вместо него вписать shared
да...Q_IMPORT_PLUGIN(jmediaplayer); - тоже убрать - это нужно для статических "плагинов" для динамических нужно пользовать плагинлоадер Название: Re: [qt-4.4.0 Linux] Работа с плагинами - начало. Отправлено: izoomer от Май 21, 2008, 21:34 убрать static из проект{а,ов} - вместо него вписать shared да...Q_IMPORT_PLUGIN(jmediaplayer); - тоже убрать - это нужно для статических "плагинов" для динамических нужно пользовать плагинлоадер а если мне нужны именно статические плагины ? ну то есть у меня есть несколько классов которые используются в несокльких проектах, так вот ... я хотел эти классы выдвинуть в плагины и собирать конечные приложения единым файлом, поскольку у меня приложение должно быть одним файлом .... как быть ? Название: Re: [qt-4.4.0 Linux] Работа с плагинами - начало. Отправлено: ритт от Май 21, 2008, 22:08 > а если мне нужны именно статические плагины ?
тогда похоже, что делаешь правильно приложи архив с сорцами - попробую у себя запустить Название: Re: [qt-4.4.0 Linux] Работа с плагинами - начало. Отправлено: Alex03 от Май 22, 2008, 05:42 а если мне нужны именно статические плагины ? А зачем тогда плагины то? Сделай библиотечку (статическую) и пользуй её...ну то есть у меня есть несколько классов которые используются в несокльких проектах, так вот ... я хотел эти классы выдвинуть в плагины и собирать конечные приложения единым файлом, поскольку у меня приложение должно быть одним файлом .... как быть ? Название: Re: [qt-4.4.0 Linux] Работа с плагинами - начало. Отправлено: ритт от Май 22, 2008, 07:34 небольшое отличие всё же есть...скажем, хочется показать jmediaplayer в списке плагинов, но по каким-то причинам нет смысла делать его динамическим
Название: Re: [qt-4.4.0 Linux] Работа с плагинами - начало. Отправлено: izoomer от Май 22, 2008, 11:03 > а если мне нужны именно статические плагины ? тогда похоже, что делаешь правильно приложи архив с сорцами - попробую у себя запустить та в приниципе в моем сообщении это и есть соурсы тестовые ... обычная main из шаблона KDevelop . Название: Re: [qt-4.4.0 Linux] Работа с плагинами - начало. Отправлено: izoomer от Май 22, 2008, 11:24 а если мне нужны именно статические плагины ? А зачем тогда плагины то? Сделай библиотечку (статическую) и пользуй её...ну то есть у меня есть несколько классов которые используются в несокльких проектах, так вот ... я хотел эти классы выдвинуть в плагины и собирать конечные приложения единым файлом, поскольку у меня приложение должно быть одним файлом .... как быть ? а что для этого надо поменять в приведенном мною примере ? Название: Re: [qt-4.4.0 Linux] Работа с плагинами - начало. Отправлено: Alex03 от Май 22, 2008, 13:24 а что для этого надо поменять в приведенном мною примере ? Выкинуть всё что касается плагинов...Почитать QTDIR/doc/html/qmake-common-projects.html#building-a-library и т.д. Для проекта библиотеки Код: TEMPLATE = lib Для проекта прог использующих библиотеку указать либу/пути к хидерам. Почитать тут: QTDIR/doc/html/qmake-project-files.html#declaring-other-libraries Вроде бы всё, если библиотеку не статическую делать, то ещё импорт/экспорт указать в исходниках... Название: Re: [qt-4.4.0 Linux] Работа с плагинами - начало. Отправлено: izoomer от Май 22, 2008, 15:00 > а если мне нужны именно статические плагины ? тогда похоже, что делаешь правильно приложи архив с сорцами - попробую у себя запустить с эти разобрался, все комплится ... вчера ечером букву не так поставил .. заработался ... в путях пыла ошибка (JMediaPlayerPlugin != JMediaPlayerPlugin(S)) теперь вопрос как все это использовать. Написал метод в плагине Код: int JMediaPlayerPlugin::getVolume() в интерфейсе объявил его virtual Код: virtual int getVolume(); вставил в другом файле проекта mainwindow.cpp: Код: JMediaPlayer * my_player = new JMediaPlayer(); а он ругается : Код: mainwindow.o: In function `MainWindow::init()': все сделал как в примере. Что не так опять ? К: * подправил тэги код Название: Re: [qt-4.4.0 Linux] Работа с плагинами - начало. Отправлено: izoomer от Май 22, 2008, 16:01 поленился примеры до конца глянуть ...
все сделал так как надо ... вроде вот так вот надо : Код: foreach (QObject *plugin, QPluginLoader::staticInstances()){ а он опять таки ругается все таки ... Код: ../libjplayer/JMediaPlayerPlugin/src/libjmediaplayer.a(moc_JMediaPlayerPlugin.o):(.data.rel.ro._ZTI18JMediaPlayerPlugin[typeinfo for JMediaPlayerPlugin]+0x18): undefined reference to `typeinfo for JMediaPlayer' подскажите что не так ? Название: Re: [qt-4.4.0 Linux] Работа с плагинами - начало. Отправлено: izoomer от Май 23, 2008, 12:48 поленился примеры до конца глянуть ... все сделал так как надо ... вроде вот так вот надо : Код: foreach (QObject *plugin, QPluginLoader::staticInstances()){ а он опять таки ругается все таки ... Код: ../libjplayer/JMediaPlayerPlugin/src/libjmediaplayer.a(moc_JMediaPlayerPlugin.o):(.data.rel.ro._ZTI18JMediaPlayerPlugin[typeinfo for JMediaPlayerPlugin]+0x18): undefined reference to `typeinfo for JMediaPlayer' подскажите что не так ? Сам в общем разобрался. У кого будут проблемы со статическими плагинами в Qt-4.4.0 вот решение. Цитировать This is caused by the fact that Qt/E is compiled with -fno-rtti by default to save space. Either compile Qt/E without -fno-rtti (you can do that by patching qmake configs), or try compiling your app with -fno-rtti as well (this may or may not work, depending on what types of casts it uses). я вписал в .pro файлы главного проекта и самого плагина Код: QMAKE_CXXFLAGS += -fno-rtti и пересобрал все ... и все заработало Все спасибо. |