Название: Добавление CustomWidget, линковка Отправлено: SpiritFire от Октябрь 20, 2009, 17:50 Прошу прощения за глупый вопрос, долго ковырялся с примером, создал свой виджет и бодавил его в Designer. Вроде все хорошо, но при добавлении его на пустую форму и сборке вылазят ошибки вида:
Код: debug/mainwindow.o: In function `ZN10MainWindowD0Ev': Вот проектный файл плагина, все указал. Код: QT += opengl Помогите, пожалуйста, в чем проблема? Указанный конструктор находится в файле "../graphwidget.cpp", который в проект виджета включен, объектный файл плагина (.а) лежит в /plugins/designer... В чем-то туплю, а вот в чем понять не могу Название: Re: Добавление CustomWidget, линковка Отправлено: Rcus от Октябрь 20, 2009, 18:21 /* Выжимка из потока негодования по поводу непонимания устройства toolchain */
Посмотрите на список библиотек подключенных в проект, если среди них есть экспортирующая ваш класс то посмотрите какие символы она экспортирует (objdump/depwalker), если найдется нужный то это интересно, иначе g Q_DECL_EXPORT/LIBS+= Название: Re: Добавление CustomWidget, линковка Отправлено: SpiritFire от Октябрь 20, 2009, 19:14 /* Выжимка из потока негодования по поводу непонимания устройства toolchain */ Посмотрите на список библиотек подключенных в проект, если среди них есть экспортирующая ваш класс то посмотрите какие символы она экспортирует (objdump/depwalker), если найдется нужный то это интересно, иначе g Q_DECL_EXPORT/LIBS+= Извините, но можно подробнее, или ссылку что почитать? Я с Qt знаком ровно две недели, g++ юзал дольше, под линухом, но что генерируется Qt-ями я без понятия. Ну, с ".о" - это понятно, объектники. а что такое ".а"-файл? Я так понимаю, сама библиотека? При ее добавлении то же самое. Название: Re: Добавление CustomWidget, линковка Отправлено: break от Октябрь 20, 2009, 22:11 Программа не линкуется с виджетом!
Проект программы на форме которой лежит ваш катомный виджет должен линковаться с ним в про файле что-то типа INCLUDEPATH += /CUSTOM_WIDGET_INCLUDE_DIR LIBS += -LCUSTOM_WIDGET_LIB_DIR -lCUSTOM_WIDGET_LIBRARY_NAME Название: Re: Добавление CustomWidget, линковка Отправлено: zamnach от Октябрь 21, 2009, 14:56 попробуйте удалить из секций HEADER и SOURCE pro-файла упоминания файлов плагина.
Название: Re: Добавление CustomWidget, линковка Отправлено: SpiritFire от Октябрь 23, 2009, 15:40 попробуйте удалить из секций HEADER и SOURCE pro-файла упоминания файлов плагина. Их там нет.Программа не линкуется с виджетом! Проект программы на форме которой лежит ваш катомный виджет должен линковаться с ним в про файле что-то типа INCLUDEPATH += /CUSTOM_WIDGET_INCLUDE_DIR LIBS += -LCUSTOM_WIDGET_LIB_DIR -lCUSTOM_WIDGET_LIBRARY_NAME Либа - это файл с расширением ".а" - я правильно понял? Тогда вероятно, что в нем не описываются нужные мне экспорты, потому что в проекте прилинковал. В проекта или исходниках плагина нужно как-то упоминать, что определенная функция должна экспортироваться? Если да, то как? Название: Re: Добавление CustomWidget, линковка Отправлено: break от Октябрь 24, 2009, 01:20 .a в случае статической линковки, в случае динамической .so в Linux или .dll в Windows но в файлах проекта они указываются без расширений - только имена
Для корректного экспорта вашего виджета - нужно использовать директиву Q_DECL_EXPORT для всех классов в библиотеке а для самого класса кастомного виджета директиву QDESIGNER_WIDGET_EXPORT - вместо нее. Во вложении шлю вам пример одного компонента - светодиодик кот. горит или не горит - код тривиален подсмотрите все что вам нужно и сделайте аналогично. Для использования такого виджета в проекте программы надо добавить INCLUDEPATH += ../CustomWidgets/QLED LIBS += -L../lib \ -lQLED Но вам надо разобраться с относительными путями в проекте - у меня так и программа и виджет в одном родительском проекте subdirs ПРОГРАММА ВИДЖЕТЫ ------КАCТОМНЫЙ ВИДЖЕТ а все динамически библиотеки в том числе и кастомные виджеты компилируются и кладутся в общую папку lib внутри главного каталога проекта LIB ПРОГРАММА ВИДЖЕТЫ ------КАСТОМНЫЙ ВИДЖЕТ поэтому в прошнике моей программы строка "-L../lib" указывает где лежат Библиотеки, а "-lQLED" указывает какую из них слинковать с программой. В виджете стоит DESTDIR = ../../lib чтобы его библиотека попала в ту самою папку lib Я не являюсь автором данного компонента - а только использую его - все указания на автора сохранены! |