Russian Qt Forum
Ноябрь 26, 2024, 14:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Подключение плагина  (Прочитано 5943 раз)
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

Как исправить?
Записан
crossly
Гость
« Ответ #1 : Декабрь 06, 2010, 17:09 »

во первых qmake сборкой не занимается и такую ошибку выдать не может.... во вторых ошибка говорит только о том что линковка не удалась.... по какой причине явно говорится выше... так что показываете вывод полностью...
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #2 : Декабрь 06, 2010, 17:26 »

Если ты виджет создал в виде плагина ,то ты его создал в виде либы, а в pro файле не видно что бы ты либу подключал.
Записан
DiamondRain
Гость
« Ответ #3 : Декабрь 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 (цель: Настольный компьютер)
Во время выполнения сборки на этапе "Сборка"
Записан
crossly
Гость
« Ответ #4 : Декабрь 06, 2010, 17:43 »

Если ты виджет создал в виде плагина ,то ты его создал в виде либы, а в pro файле не видно что бы ты либу подключал.
Записан
DiamondRain
Гость
« Ответ #5 : Декабрь 06, 2010, 17:43 »

Если ты виджет создал в виде плагина ,то ты его создал в виде либы, а в pro файле не видно что бы ты либу подключал.

LIBS += -L.  -  это подключение всех либ из текущей папки. Нужная либа там уже находится.
Записан
DiamondRain
Гость
« Ответ #6 : Декабрь 06, 2010, 17:52 »

undefined reference to `AnalogClock::AnalogClock(QWidget*)

Это как раз класс из моего плагина. Подключение библиотек сделал, путь к загаловочным файлам указал. Что еще упустил?
Записан
crossly
Гость
« Ответ #7 : Декабрь 06, 2010, 17:56 »

Цитировать
undefined reference to `AnalogClock::AnalogClock(QWidget*)
говорит о том что библиотеку твою make не нашел...
Записан
DiamondRain
Гость
« Ответ #8 : Декабрь 06, 2010, 18:15 »

Цитировать
undefined reference to `AnalogClock::AnalogClock(QWidget*)
говорит о том что библиотеку твою make не нашел...

Странно, подключение правильно ведь выполнено? LIBS += -L. В папке с проектом лежит libcustomwidgetplugin.so. В дизайнере мой плагин отображается.
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #9 : Декабрь 06, 2010, 18:29 »

Цитировать
undefined reference to `AnalogClock::AnalogClock(QWidget*)
говорит о том что библиотеку твою make не нашел...

Странно, подключение правильно ведь выполнено? LIBS += -L. В папке с проектом лежит libcustomwidgetplugin.so. В дизайнере мой плагин отображается.

LIBS += -L.
Интересная конструкция - -L. указывает на текущий каталог, а какие же бибилиотеки подключать надо?
Компилятор должен поучить конкретные имена библиотек. Они подключаются не хором, а по имени.

А в дизайнере отображается, потому что библиотека лежит в месте известном дизайнеру и подключается как плагин.
Вы же хотите прилинковть неизвестную библиотеку к своей программе. Ваша программа не может работать с плагинами.
Записан
DiamondRain
Гость
« Ответ #10 : Декабрь 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.
Почему не может найти в библиотеку? Я подумал, может её в ресурсы надо положить? Скажите, где почитать, чтобы я не задавал дурацких вопросов Улыбающийся
Записан
DiamondRain
Гость
« Ответ #11 : Декабрь 06, 2010, 19:35 »

Получилось только так:

LIBS += libcustomwidgetplugin.so

Скажите, это нормальный вариант подключения? Не будет проблем в дальнейшем?
Записан
crossly
Гость
« Ответ #12 : Декабрь 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
Записан
andybeg
Гость
« Ответ #13 : Декабрь 09, 2010, 10:11 »

кмпилировал плагины из урока, написал свой, но вот вопрос - понимаю при компиляции плуг должен перемещаться в дтректорию плугов и понимаю за это отвечает переменная QT_PLUGIN_PATH, где её обозначить нужно, IDE - QtCreator
Записан
andybeg
Гость
« Ответ #14 : Декабрь 09, 2010, 10:57 »

разобрался - за перенос ДЛЛ в папку с плагинами отвечает переменная среды QT_INSTALL_PLUGINS
target.path = $$[QT_INSTALL_PLUGINS]/designer
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.123 секунд. Запросов: 23.