crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Линковка своего Qt плагина с основной программой
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
sidsukana Дата 13.5.2014, 12:31
  Проблема решена. Причина была в неправильном имени плагина в макросе импорта.
sidsukana Дата 13.5.2014, 9:07
  Добрый день!
Бьюсь с проблемой, не могу понять что не правильно.
Хочу сделать плагин, который загружается в основную программу статически

Сделал все по статьям http://qt-project.org/doc/qt-5/plugins-howto.html и http://qt-project.org/doc/qt-5/qtwidgets-t...ting-the-plugin

Получаю ошибку при компиляции основной программы (проекта)

Цитата
debug/main.o: In function `ZN23StaticmpqPluginInstanceC1Ev':
C:\Sources\qsw\build/../qsw/main.cpp:6: undefined reference to `qt_static_plugin_mpq()'


Windows 7 x64, Qt 5.2.1 MinGW 32-bit. QtCreator 3.1
novichkov Дата 1.12.2012, 15:00
  Я хочу в программе и в плагине к ней использовать один класс наименее затратным способом. Одно из решений - выделить этот класс в отдельную библиотеку и линковать к ней и программу, и плагин. Есть ли другие решения?
Litkevich Yuriy Дата 30.11.2012, 19:56
  novichkov, я честно говоря не понял, что ты пытаешься сделать.

Ты хочешь в одном плагине использовать другой плагин?
Iron Bug Дата 30.11.2012, 17:59
  я не юзаю Qt, но беглый поиск в гугле выдал банальный макрос для импорта-экспорта (аналог которого без Qt просто пишут руками)
Цитата
#ifndef CORE_LIBRARY
#define APP_CORE_EXPORTS Q_DECL_IMPORT
#else
#define APP_CORE_EXPORTS Q_DECL_EXPORT
#endif

соответственно, при классах должен стоять модификатор APP_CORE_EXPORTS, а при библиотеке - глобальный макрос CORE_LIBRARY. как-то так должно быть.
novichkov Дата 30.11.2012, 10:53
  Вот файл проекта одного из плагинов:

TEMPLATE = lib
CONFIG += plugin
CONFIG += warn_on
CONFIG += debug_and_release

PVERSION = 1.0.0

DEFINES += PLUGIN_VERSION=\\\"$$PVERSION\\\"

HEADERS += autonumberplugin.h
SOURCES += autonumberplugin.cpp

HEADERS += ../../qoobar_app/iqoobarplugin.h

HEADERS += ../../qoobar_app/tagger.h
HEADERS += ../../qoobar_app/coverimage.h
# без этих двух файлов плагин не собирается, с этими файлами dll плагина содержит их код.
SOURCES += ../../qoobar_app/tagger.cpp
SOURCES += ../../qoobar_app/coverimage.cpp

INCLUDEPATH += ../../qoobar_app
DEPENDPATH += ../../qoobar_app

TARGET = autonumber

BUILD_DIR = 
release {
    BUILD_DIR = ../../../release
}
debug {
    BUILD_DIR = ../../../debug
}
DLLDESTDIR = $${BUILD_DIR}/plugins
DESTDIR = $${BUILD_DIR}/plugins
OBJECTS_DIR = $${BUILD_DIR}/$${TARGET}
RCC_DIR = $${BUILD_DIR}/$${TARGET}
MOC_DIR = $${BUILD_DIR}/$${TARGET}

unix {
!mac {
    PLUGINS_PATH = /usr/share/qoobar/plugins
    target.path = $$PLUGINS_PATH
    INSTALLS += target
}
}


Может, я тупой, но я не понимаю, как заменить
SOURCES += ../../qoobar_app/tagger.cpp
SOURCES += ../../qoobar_app/coverimage.cpp

на что-то вроде
LIBS += smth.exe

Iron Bug Дата 30.11.2012, 10:10
  не очень понятно, зачем включать cpp, если требуются только классы. все библиотеки (и плагины, как их разновидность) имеют открытые входы для линковки в процессе загрузки. это не вызывает проблем с их компиляцией.
novichkov Дата 30.11.2012, 8:51
  Подскажите, пожалуйста, как правильно разрешить такую проблему: есть Qt плагин, который использует некоторые классы, определенные в папке с исходным кодом основной программы. Чтобы нормально слинковать плагин, мне пришлось включить файлы cpp этих классов в файл pro плагина, что фактически означает дублирование кода и разбухание размена плагина. Можно ли как-нибудь использовать основной исполняемый файл как библиотеку, или обязательно нужно выносить общие классы в отдельную разделяемую библиотеку?
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 21:33