Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: DiamondRain от Декабрь 06, 2010, 17:04



Название: Подключение плагина
Отправлено: DiamondRain от Декабрь 06, 2010, 17:04
Создал пользовательский виджет в виде плагина. Его видно из Qt-дизайнера. Указываю INCLUDEPATH с заголовочными файлами. Код:
Код:

QT       += core gui

DESTDIR = .

TARGET = 123
TEMPLATE = app

LIBS += -L.

INCLUDEPATH = ../../../../../tmp/customwidgetplugin

SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

При 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
man 8 ld.so


Название: 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