Название: Подключение плагина Отправлено: DiamondRain от Декабрь 06, 2010, 17:04 Создал пользовательский виджет в виде плагина. Его видно из Qt-дизайнера. Указываю INCLUDEPATH с заголовочными файлами. Код:
Код:
При qmake вылезает ошибка: :: error: collect2: ld returned 1 exit status Как исправить? Название: Re: Подключение плагина Отправлено: crossly от Декабрь 06, 2010, 17:09 во первых qmake сборкой не занимается и такую ошибку выдать не может.... во вторых ошибка говорит только о том что линковка не удалась.... по какой причине явно говорится выше... так что показываете вывод полностью...
Название: Re: Подключение плагина Отправлено: ecspertiza от Декабрь 06, 2010, 17:26 Если ты виджет создал в виде плагина ,то ты его создал в виде либы, а в pro файле не видно что бы ты либу подключал.
Название: Re: Подключение плагина Отправлено: DiamondRain от Декабрь 06, 2010, 17:41 во первых qmake сборкой не занимается и такую ошибку выдать не может.... во вторых ошибка говорит только о том что линковка не удалась.... по какой причине явно говорится выше... так что показываете вывод полностью... Выполняется сборка проекта 123... Настройки не изменились, этап qmake пропускается. Запускается "/usr/bin/make" -w make: Вход в каталог `/home/oleg/projects/plugin_test/123' g++ -m64 -Wl,-rpath,/opt/qtsdk-2010.05/qt/lib -o 123 main.o mainwindow.o moc_mainwindow.o -L/opt/qtsdk-2010.05/qt/lib -L. -lQtGui -L/opt/qtsdk-2010.05/qt/lib -L/usr/X11R6/lib64 -lQtCore -lpthread mainwindow.o: In function `Ui_MainWindow::setupUi(QMainWindow*)': mainwindow.cpp:(.text._ZN13Ui_MainWindow7setupUiEP11QMainWindow[Ui_MainWindow::setupUi(QMainWindow*)]+0x124): undefined reference to `AnalogClock::AnalogClock(QWidget*)' make: Выход из каталога `/home/oleg/projects/plugin_test/123' collect2: ld returned 1 exit status make: *** [123] Ошибка 1 Процесс "/usr/bin/make" завершился с кодом %2. Возникла ошибка при сборке проекта 123 (цель: Настольный компьютер) Во время выполнения сборки на этапе "Сборка" Название: Re: Подключение плагина Отправлено: crossly от Декабрь 06, 2010, 17:43 Если ты виджет создал в виде плагина ,то ты его создал в виде либы, а в pro файле не видно что бы ты либу подключал. Название: Re: Подключение плагина Отправлено: DiamondRain от Декабрь 06, 2010, 17:43 Если ты виджет создал в виде плагина ,то ты его создал в виде либы, а в pro файле не видно что бы ты либу подключал. LIBS += -L. - это подключение всех либ из текущей папки. Нужная либа там уже находится. Название: Re: Подключение плагина Отправлено: DiamondRain от Декабрь 06, 2010, 17:52 undefined reference to `AnalogClock::AnalogClock(QWidget*)
Это как раз класс из моего плагина. Подключение библиотек сделал, путь к загаловочным файлам указал. Что еще упустил? Название: Re: Подключение плагина Отправлено: crossly от Декабрь 06, 2010, 17:56 Цитировать undefined reference to `AnalogClock::AnalogClock(QWidget*) говорит о том что библиотеку твою make не нашел... Название: Re: Подключение плагина Отправлено: DiamondRain от Декабрь 06, 2010, 18:15 Цитировать undefined reference to `AnalogClock::AnalogClock(QWidget*) говорит о том что библиотеку твою make не нашел... Странно, подключение правильно ведь выполнено? LIBS += -L. В папке с проектом лежит libcustomwidgetplugin.so. В дизайнере мой плагин отображается. Название: Re: Подключение плагина Отправлено: Mikhail от Декабрь 06, 2010, 18:29 Цитировать undefined reference to `AnalogClock::AnalogClock(QWidget*) говорит о том что библиотеку твою make не нашел... Странно, подключение правильно ведь выполнено? LIBS += -L. В папке с проектом лежит libcustomwidgetplugin.so. В дизайнере мой плагин отображается. LIBS += -L. Интересная конструкция - -L. указывает на текущий каталог, а какие же бибилиотеки подключать надо? Компилятор должен поучить конкретные имена библиотек. Они подключаются не хором, а по имени. А в дизайнере отображается, потому что библиотека лежит в месте известном дизайнеру и подключается как плагин. Вы же хотите прилинковть неизвестную библиотеку к своей программе. Ваша программа не может работать с плагинами. Название: Re: Подключение плагина Отправлено: DiamondRain от Декабрь 06, 2010, 18:46 Сделал так: LIBS += -L. -lcustomwidgetplugin. Я правильно понял - это означает прилинковку библиотеки libcustomwidgetplugin.so из текущей папки проекта?
При запуске выходит ошибка: error while loading shared libraries: libcustomwidgetplugin.so: cannot open shared object file: No such file or directory. Почему не может найти в библиотеку? Я подумал, может её в ресурсы надо положить? Скажите, где почитать, чтобы я не задавал дурацких вопросов :) Название: Re: Подключение плагина Отправлено: DiamondRain от Декабрь 06, 2010, 19:35 Получилось только так:
LIBS += libcustomwidgetplugin.so Скажите, это нормальный вариант подключения? Не будет проблем в дальнейшем? Название: Re: Подключение плагина Отправлено: crossly от Декабрь 06, 2010, 21:07 Сделал так: LIBS += -L. -lcustomwidgetplugin. Я правильно понял - это означает прилинковку библиотеки libcustomwidgetplugin.so из текущей папки проекта? При запуске выходит ошибка: error while loading shared libraries: libcustomwidgetplugin.so: cannot open shared object file: No such file or directory. Почему не может найти в библиотеку? Я подумал, может её в ресурсы надо положить? Скажите, где почитать, чтобы я не задавал дурацких вопросов :) Код: man 8 ldconfig Название: Re: Подключение плагина Отправлено: andybeg от Декабрь 09, 2010, 10:11 кмпилировал плагины из урока, написал свой, но вот вопрос - понимаю при компиляции плуг должен перемещаться в дтректорию плугов и понимаю за это отвечает переменная QT_PLUGIN_PATH, где её обозначить нужно, IDE - QtCreator
Название: Re: Подключение плагина Отправлено: andybeg от Декабрь 09, 2010, 10:57 разобрался - за перенос ДЛЛ в папку с плагинами отвечает переменная среды QT_INSTALL_PLUGINS
target.path = $$[QT_INSTALL_PLUGINS]/designer |