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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сборка плагинов  (Прочитано 5664 раз)
dr_Begemot
Гость
« : Август 20, 2009, 09:35 »

Делаю плагин для designer.
У меня есть виджет, оформленный в виде dll. Он представляет собой немного модифицированную кнопку для выбора цвета.
Сначала я сделал pro-файл для плагина так:
designer.pro:
Код:
TEMPLATE     = lib
CONFIG      += designer plugin release
TARGET       = DesignerPlugin
DESTDIR      = $$[QT_INSTALL_PLUGINS]/designer

DEFINES     += COLORBUTTON_STATICLIB

ROOT = ..

DEPENDPATH   += .
INCLUDEPATH  += .

include($$ROOT/src/ColorButton/ColorButton.pri)
include($$ROOT/src/ColorButton/ColorButtonFiles.pri)

HEADERS      += DesignerPlugin.h
SOURCES      += DesignerPlugin.cpp
RESOURCES    = DesignerPlugin.qrc
ColorButton.pri:
Код:
COLORBUTTON_LIB = -lColorButton

INCLUDEPATH += $$ROOT/src/ColorButton/include
DEPENDPATH  += $$ROOT/src/ColorButton/src
ColorButtonFiles.pri:
Код:
HEADERS       += src/ColorButton_global.h\
                        src/ColorButton.h

SOURCES       += src/ColorButton.cpp

Все скомпилилось, плагин обнаружился дизайнером без ошибок, все ок.

Потом я решил, что это как-то не очень элегантно и решил добавлять не исходные файлы ColorButton к плагину, а саму dll.
designer.pro:
Код:
TEMPLATE     = lib
CONFIG      += designer plugin release
TARGET       = DesignerPlugin
DESTDIR      = $$[QT_INSTALL_PLUGINS]/designer

#DEFINES     += COLORBUTTON_STATICLIB <- закомментарил

ROOT = ..

DEPENDPATH   += .
INCLUDEPATH  += .

#!!! добавление библиотеки вместо исходников !!!
include($$ROOT/src/ColorButton/ColorButton.pri)
LIBS      += -L$$ROOT/lib $$COLORBUTTON_LIB

HEADERS      += DesignerPlugin.h
SOURCES      += DesignerPlugin.cpp
RESOURCES    = DesignerPlugin.qrc

Такое проект тоже скомпилился нормально, но дизайнер библиотеку не подключает... Пишет что:
The plugin DesignerPlugin.dll yses incompatible Qt library. Expected build key "Windows msvc release full-config", got "Windows msvc debug full-config"

Кинул в папку плагинов саму библиотеку ColorButton - все то же.

Вот код проекта самой библиотеки ColorButton:
ColorButton.pro:
Код:
TEMPLATE      = lib
CONFIG      += dll

ROOT = ../..

DLLDESTDIR    = $$ROOT/bin
DESTDIR       = $$ROOT/lib

TARGET        = ColorButton
VERSION       = 1.0.0

TRANSLATIONS  = ts/ColorButton_ru.ts

include(ColorButton.pri)

contains(CONFIG, staticlib) {
DEFINES += COLORBUTTON_STATICLIB
} else {
DEFINES += COLORBUTTON_SHAREDLIB
}

win32 {
DEFINES += COLORBUTTON_MAKEDLL
}

include(ColorButtonFiles.pri)

Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Август 20, 2009, 09:58 »

У тебя несовместимость по ключу build key.

Expected build key "Windows msvc release full-config", got "Windows msvc debug full-config".

Скорее всего ты пытаешься подсунуть debug версию dll  вместо pelease.

Вот что значит это сообщение. Перекомпилируй DLL.
Записан
dr_Begemot
Гость
« Ответ #2 : Август 20, 2009, 10:30 »

У тебя несовместимость по ключу build key.

Expected build key "Windows msvc release full-config", got "Windows msvc debug full-config".

Скорее всего ты пытаешься подсунуть debug версию dll  вместо pelease.

Вот что значит это сообщение. Перекомпилируй DLL.

В pro-файле dll переписал CONFIG        += dll release
Перекомпилил dll...
Перекомпилил плагин на всякий случай...
Все равно все то же сообщение...
Записан
ритт
Гость
« Ответ #3 : Август 20, 2009, 10:43 »

реестр почистил?
Записан
dr_Begemot
Гость
« Ответ #4 : Август 20, 2009, 10:43 »

У тебя несовместимость по ключу build key.

Expected build key "Windows msvc release full-config", got "Windows msvc debug full-config".

Скорее всего ты пытаешься подсунуть debug версию dll  вместо pelease.

Вот что значит это сообщение. Перекомпилируй DLL.

Перекомпилил все... забыл очистить мейкфайлы...
Теперь другая ошибка... пишет: Cannot load library "DesignerPlugin.dll": Не найден указанный модуль.
Хотя ColorButton1.dll в папке плагинов присутствует... и DesignerPlugin.dll тоже.
Записан
dr_Begemot
Гость
« Ответ #5 : Август 20, 2009, 10:44 »

реестр почистил?

Реестр??? А это зачем?
Записан
ритт
Гость
« Ответ #6 : Август 20, 2009, 10:45 »

когда ты уже начнёшь документацию читать?..
Записан
dr_Begemot
Гость
« Ответ #7 : Август 20, 2009, 10:47 »

О! Получилось...
Оказалось, что либу ColorButton1.dll надо было класть не в ту же папку где плагины, а в папку C:\Qt\2009.03\qt\bin\
Тогда все работает... очень странно - какое-то не очень правильное решение.
Записан
dr_Begemot
Гость
« Ответ #8 : Август 20, 2009, 10:48 »

когда ты уже начнёшь документацию читать?..

Что ты имеешь ввиду под реестром? Реестр винды?
Записан
ритт
Гость
« Ответ #9 : Август 20, 2009, 11:22 »

да, реестр венды. плагинлоадеры хранят информацию об известных модулях - чтобы не загружать кажды раз "битые" модули и т.д.
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #10 : Август 20, 2009, 12:34 »

О! Получилось...
Оказалось, что либу ColorButton1.dll надо было класть не в ту же папку где плагины, а в папку C:\Qt\2009.03\qt\bin\
Тогда все работает... очень странно - какое-то не очень правильное решение.

Можно положить в любую папку которая прописана в путях
Записан
dr_Begemot
Гость
« Ответ #11 : Август 20, 2009, 13:49 »

О! Получилось...
Оказалось, что либу ColorButton1.dll надо было класть не в ту же папку где плагины, а в папку C:\Qt\2009.03\qt\bin\
Тогда все работает... очень странно - какое-то не очень правильное решение.

Можно положить в любую папку которая прописана в путях

В каких путях? в Path? Можно поподробней?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #12 : Август 20, 2009, 14:38 »

О! Получилось...
Оказалось, что либу ColorButton1.dll надо было класть не в ту же папку где плагины, а в папку C:\Qt\2009.03\qt\bin\
Тогда все работает... очень странно - какое-то не очень правильное решение.

Можно положить в любую папку которая прописана в путях

В каких путях? в Path? Можно поподробней?

Естественно в PATH.

О чем подробнее?
О том, что реализация твоего плагина в DLL и для его функционирования DLL надо загрузить.
А найти эту DLL можно только в путях - PATH
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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