Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: dr_Begemot от Август 20, 2009, 09:35



Название: Сборка плагинов
Отправлено: 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)



Название: Re: Сборка плагинов
Отправлено: Mikhail от Август 20, 2009, 09:58
У тебя несовместимость по ключу build key.

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

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

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


Название: Re: Сборка плагинов
Отправлено: dr_Begemot от Август 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...
Перекомпилил плагин на всякий случай...
Все равно все то же сообщение...


Название: Re: Сборка плагинов
Отправлено: ритт от Август 20, 2009, 10:43
реестр почистил?


Название: Re: Сборка плагинов
Отправлено: dr_Begemot от Август 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 тоже.


Название: Re: Сборка плагинов
Отправлено: dr_Begemot от Август 20, 2009, 10:44
реестр почистил?

Реестр??? А это зачем?


Название: Re: Сборка плагинов
Отправлено: ритт от Август 20, 2009, 10:45
когда ты уже начнёшь документацию читать?..


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


Название: Re: Сборка плагинов
Отправлено: dr_Begemot от Август 20, 2009, 10:48
когда ты уже начнёшь документацию читать?..

Что ты имеешь ввиду под реестром? Реестр винды?


Название: Re: Сборка плагинов
Отправлено: ритт от Август 20, 2009, 11:22
да, реестр венды. плагинлоадеры хранят информацию об известных модулях - чтобы не загружать кажды раз "битые" модули и т.д.


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

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


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

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

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


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

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

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

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

О чем подробнее?
О том, что реализация твоего плагина в DLL и для его функционирования DLL надо загрузить.
А найти эту DLL можно только в путях - PATH