Название: Qt и плагины (undefined symbol) Отправлено: zodiac от Февраль 26, 2008, 18:03 Плагинный интерфейс:
Код: #include <QObject> Плагин: Код: #include <QtCore> Вызов из программы: Код: pluginsDir = QDir(qApp->applicationDirPath()); Выдает следущее: QLibrary::load_sys: Cannot load /home..../libtest_plugin.so (/home..../libtest_plugin.so: undefined symbol: _ZTV10testPlugin) Что это за такой undefined symbol? Везде происказ, ничего не нашел нужного:( Название: Re: Qt и плагины (undefined symbol) Отправлено: vregess от Февраль 26, 2008, 18:40 попробуй Q_EXPORT_PLUGIN2
Название: Re: Qt и плагины (undefined symbol) Отправлено: zodiac от Февраль 26, 2008, 18:52 Сделал так: Q_EXPORT_PLUGIN2(testPlugin, testPlugin);
Все равно также выскакивает. Название: Re: Qt и плагины (undefined symbol) Отправлено: BRE от Февраль 26, 2008, 19:05 Попробуй так:
class pluginInterface { ... }; class testPlugin : public QObject, public pluginInterface { ... }; Читай внимательно Assistant. ;) Название: Re: Qt и плагины (undefined symbol) Отправлено: zodiac от Февраль 26, 2008, 19:11 Код: #include <QtCore> Код: #include <QObject> все равно. ассистента читал, по-всякому уже пробовал Название: Re: Qt и плагины (undefined symbol) Отправлено: BRE от Февраль 26, 2008, 19:25 Может дело в этом?
When building plugins to extend an application, it is important to ensure that the plugin is configured in the same way as the application. This means that if the application was built in release mode, plugins should be built in release mode, too. If you configure Qt to be built in both debug and release modes, but only build applications in release mode, you need to ensure that your plugins are also built in release mode. By default, if a debug build of Qt is available, plugins will only be built in debug mode. To force the plugins to be built in release mode, add the following line to the plugin's project file: CONFIG += release This will ensure that the plugin is compatible with the version of the library used in the application. Название: Re: Qt и плагины (undefined symbol) Отправлено: zodiac от Февраль 26, 2008, 19:34 Не помогло.
Код: zodiac@zodiac ~/Desktop/crypt/main/plugins $ nm libtest_plugin.so Название: Re: Qt и плагины (undefined symbol) Отправлено: Вячеслав от Февраль 26, 2008, 19:40 Конструктора может сделать ? Ы ?
Название: Re: Qt и плагины (undefined symbol) Отправлено: BRE от Февраль 26, 2008, 19:41 Не помогло. Код: zodiac@zodiac ~/Desktop/crypt/main/plugins $ nm libtest_plugin.so Странно, вот тот symbol, которого ему не хватает. А точно пытаешься загрузить именно этот файл, может старый файл остался в директории откуда грузишь плагин? Название: Re: Qt и плагины (undefined symbol) Отправлено: Вячеслав от Февраль 26, 2008, 19:44 Не помогло. Код: zodiac@zodiac ~/Desktop/crypt/main/plugins $ nm libtest_plugin.so Странно, вот тот symbol, которого ему не хватает. А точно пытаешься загрузить именно этот файл, может старый файл остался в директории откуда грузишь плагин? Название: Re: Qt и плагины (undefined symbol) Отправлено: BRE от Февраль 26, 2008, 19:50 А U это не undefined случаем ? Парюсь, именно это. ;DА вот что ему надо??? Название: Re: Qt и плагины (undefined symbol) Отправлено: BRE от Февраль 26, 2008, 19:54 Ну попробуй так:
Q_EXPORT_PLUGIN2(testplugin, testPlugin); Это я Echo Plugin Example смотрю. ;) Название: Re: Qt и плагины (undefined symbol) Отправлено: Вячеслав от Февраль 26, 2008, 20:02 Таки вять того ,кто умеет из _ZTV10testPlugin сделать нормальное имя и поглядеть - кто нужен ....
А вообще сделай плагину конструктора и деструктора - может полегчает ;) Название: Re: Qt и плагины (undefined symbol) Отправлено: BRE от Февраль 26, 2008, 20:08 Пересобери весь проект (make distclean; qmake-qt4; make), этот символ определяется в moc-файле. Похоже moc файл не подключается.
Название: Re: Qt и плагины (undefined symbol) Отправлено: vaprele07 от Февраль 27, 2008, 04:30 Q_EXPORT_PLUGIN2(testplugin, testPlugin) вот это у тебя должно где находиться? :) правильно! где-нибудь в объектном модуле, а оно у тебя в заголовке...
и еще интересное для qobject_cast важен порядок: Код: class testPlugin : public QObject, public pluginInterface Код: class testPlugin : public pluginInterface, public QObject подмечу на счет конструкторов они не вызываются, а методы testPlugin имеют статичную форму... для полноты используй фабрику... к примеру туже QAbstractExtensionFactory Название: Re: Qt и плагины (undefined symbol) Отправлено: zodiac от Февраль 27, 2008, 12:52 Сделал вот так:
test_plugin.h: Код: #include <QtCore> Код: #include "test_plugin.h" Перекомпилировал все. Теперь пишет: "Unknown error" Название: Re: Qt и плагины (undefined symbol) Отправлено: Вячеслав от Февраль 27, 2008, 13:11 strace натрави ..... strace твоя_программа
А вообще - давай полные исходники проекта - посмотрим Название: Re: Qt и плагины (undefined symbol) Отправлено: zodiac от Февраль 27, 2008, 13:14 Щас echoplugin взял из ассистента. Все сделал как написано, в итоге:
Цитировать zodiac@zodiac ~/Desktop/echoplugin/echowindow $ ./echowindow ASSERT: "!isEmpty()" in file /usr/include/qt4/QtCore/qlist.h, line 242 Аварийный останов zodiac@zodiac ~/Desktop/echoplugin/echowindow $ Название: Re: Qt и плагины (undefined symbol) Отправлено: zodiac от Февраль 27, 2008, 13:31 Разобрался с ошибкой echo, теперь также пишет: "Unknown error".
Название: Re: Qt и плагины (undefined symbol) Отправлено: Вячеслав от Февраль 27, 2008, 13:40 ............................................... сказал боцман и начал грязно ругаться ...
Ну дерни ты свою прогу через strace - оно тебе скаже че ему надо Название: Re: Qt и плагины (undefined symbol) Отправлено: zodiac от Февраль 27, 2008, 13:47 дак а я не знаю чего там смотреть-то.
Название: Re: Qt и плагины (undefined symbol) Отправлено: Вячеслав от Февраль 27, 2008, 13:55 ткни в командной строке strace ТвойПрог >out
а далее в out глазками поищи где оно рушиться .... ЗЫ Ну кинь ты полные исходники своего проекта - легче будет .... Название: Re: Qt и плагины (undefined symbol) Отправлено: zodiac от Февраль 27, 2008, 14:18 А исходники EchoPlugin из ассистента) Там тоже такая же ошибка.
А у тебя нет простого проекта, который юзает плагины? Как бы шаблон просто. Название: Re: Qt и плагины (undefined symbol) Отправлено: Вячеслав от Февраль 27, 2008, 14:29 Гы ;) я с plug&paint'a все содрал ;) Щаз простых проектов уже не найти :(
Таки чем p&p В качестве простого примера не подходит ? Название: Re: Qt и плагины (undefined symbol) Отправлено: zodiac от Февраль 27, 2008, 14:46 Все, что имеется сейчас:
/cryptMain.cpp: Код: #include "cryptMain.h" Код: #include <QPluginLoader> формочка:) /main.cpp: Код: #include <QApplication> Код: ###################################################################### Код: #include <QObject> Код: ###################################################################### Код: #include "test_plugin.h" Код: #include <QtCore> Название: Re: Qt и плагины (undefined symbol) Отправлено: Вячеслав от Февраль 27, 2008, 14:59 типа эта плагин - твой
загрузчик мой Код: #include "pluginInterface.h " pS и в форточках и под Дебианом ;) ..... Название: Re: Qt и плагины (undefined symbol) Отправлено: zodiac от Февраль 27, 2008, 15:18 Ого! Работает:) Спасибо.
Название: Re: Qt и плагины (undefined symbol) Отправлено: Вячеслав от Февраль 27, 2008, 15:32 ;D ;D ;D Удачи ;)
Название: Re: Qt и плагины (undefined symbol) Отправлено: zodiac от Февраль 28, 2008, 12:51 А если использовать этот загрузчик несколько раз, то старый плагин обязательно как-либо выгружать?
Название: Re: Qt и плагины (undefined symbol) Отправлено: Вячеслав от Февраль 28, 2008, 13:29 А нафига ? Плагин выгружаеться когда убиваеться последняя ссылка на то,что вернул instance()...
В том-же p&p они тупо в цикле грузят одним лоадером пачку плагинов .... Название: Re: Qt и плагины (undefined symbol) Отправлено: zodiac от Февраль 28, 2008, 13:33 Все. Ясненько. Спасибо!
Название: Re: Qt и плагины (undefined symbol) Отправлено: -QT- от Сентябрь 08, 2008, 15:27 Доброго времени суток All !
Не хочу открывать новую тему, так как проблема идентична. Все варианты приведенные в обсуждении проверил. До этого плагин грузился и работал без проблем. Что поменял в плагине непомню - изменения были по мелочи теперь не работает и выдает такую же ошибку. Подскажите что это всетаки и как можно отловить ошибку в плагине, есть ли отладка плагина. ведь при сборке и линковке ошибок нет. Заранее благодарен за помощь. |