crossplatform.ru

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

4 страниц V   1 2 3 > »   
Ответить в данную темуНачать новую тему
> [Qt Plugins] Не подгружается плагин, прошу помощи., [closed]
flareguner
  опции профиля:
сообщение 8.10.2010, 10:00
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 16.11.2009
Пользователь №: 1231

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго времени суток. Сразу замечу, что это репост моей темыс ЛОРа, надеюсь тут помогут оперативнее.

Уже не знаю где искать, помогите пожалуйста. Делал всё как в примере Echo Plugin. Подгружается плагин вот здесь. В errorString плюет что-то подобное:
/home/georg/qgt/lib/qgoogletranslator/libgoogletranslate.so: undefined symbol: _ZTV15Googletranslate)"


Вот что говорит ldd
georg@citadel:~$ ldd -d /home/georg/qgt/lib/qgoogletranslator/libgoogletranslate.so
        linux-gate.so.1 =>  (0xb78bb000)
        libQtGui.so.4 => /usr/lib/libQtGui.so.4 (0xb6df0000)
        libQtCore.so.4 => /usr/lib/libQtCore.so.4 (0xb6b6c000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb6a76000)
        libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb6a50000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb6a32000)
        libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb68ec000)
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb68bd000)
        libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb68a3000)
        libaudio.so.2 => /usr/lib/libaudio.so.2 (0xb688d000)
        libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0xb67c4000)
        libpng12.so.0 => /lib/libpng12.so.0 (0xb67a0000)
        libz.so.1 => /usr/lib/libz.so.1 (0xb678c000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb6715000)
        libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0xb66d6000)
        libSM.so.6 => /usr/lib/libSM.so.6 (0xb66ce000)
        libICE.so.6 => /usr/lib/libICE.so.6 (0xb66b6000)
        libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb66ad000)
        libXext.so.6 => /usr/lib/libXext.so.6 (0xb669e000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0xb6580000)
        libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb657c000)
        libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0xb6577000)
        librt.so.1 => /lib/i686/cmov/librt.so.1 (0xb656e000)
        /lib/ld-linux.so.2 (0xb78bc000)
        libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb6548000)
        libXt.so.6 => /usr/lib/libXt.so.6 (0xb64f6000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0xb64f2000)
        libpcre.so.3 => /lib/libpcre.so.3 (0xb64bf000)
        libuuid.so.1 => /lib/libuuid.so.1 (0xb64bb000)
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0xb64a2000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb649d000)
undefined symbol: _ZTV8GetReply (/home/georg/qgt/lib/qgoogletranslator/libgoogletranslate.so)
undefined symbol: _ZTV15Googletranslate (/home/georg/qgt/lib/qgoogletranslator/libgoogletranslate.so)
undefined symbol: _ZTV11Plinterface     (/home/georg/qgt/lib/qgoogletranslator/libgoogletranslate.so)
georg@citadel:~$


Версия Qt:
georg@citadel:~$ systemsettings -v
Qt: 4.6.3



Ссылка на сам плагин. Насчет qt4_wrap_cpp: не помогает, пробовал. Для сборки использую CMake, его конфиг можно узреть по ссылке на сорцы. Подсматривал в другом проекте, там всё точно так же реализованно. Помогите пожалуйста.


Уже разобрался, тема закрыта.

Сообщение отредактировал flareguner - 8.10.2010, 10:48
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 2.1.2011, 18:40
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Пытаюсь создать плагин, помогите кашу в голове в порядок привести ))

в общем, делал всё по инструкции из книги Блашнет. В дезайнере появился виджет, кладётся на форму, вид такой, как описан в классе в setStyleSheet

только когда начинаю компилировать проект, где используется плагин, оказывается, что в ui_*.h вставлен инклуд
#include "MyPlaginName.h"
путь к которому, естественно, не надодится, так как файл лежит в проекте плагина. Мне вручную нужно это файл куда-то скопировать ? То есть - в проект, использующий плагин ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 2.1.2011, 21:30
Сообщение #3


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(Алексей1153 @ 2.1.2011, 18:40) *
То есть - в проект, использующий плагин ?
Если я все правильно понял, ты сделал плагин для QtDesigner, поэтому единственный проект, который может твой плагин использовать, это опять же таки QtDesigner. Это нужно только для удобства разработки.
Если ты хочешь использовать этот виджет в своем проекте, ты должен добавить его в проект. Как ты уже это сделаешь, решать тебе. Я бы создал .pri файл для подключения его в проект.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 3.1.2011, 14:02
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Понятно. А как такой файл сделать ? Поиск по сайту ничего не выдал
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 3.1.2011, 19:32
Сообщение #5


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Алексей1153, отдельного описания наверное нет, он имеет тот же синтаксис, что и файл проекта (.pro)
Просто с .pri файл часто выносят какие то общие настройки, а подключается он в .pro файле директивой include.
В твоём случае, на мой взгляд, было бы удобно сделать .pri файл для подключения твоего виджета в любой проект
Содержание примерно следущее
INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD
HEADERS += mywidget.h
SOURCES += mywidget.cpp
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 3.1.2011, 20:41
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(igor_bogomolov @ 3.1.2011, 21:32) *
HEADERS += mywidget.h
SOURCES += mywidget.cpp
лучше имя файла предварить переменной $$PWD:
HEADERS += $$PWD/mywidget.h
SOURCES += $$PWD/mywidget.cpp
иначе при теневой сборке могут возникнуть проблемы:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 3.1.2011, 20:57
Сообщение #7


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


спасибо за пинки в нужном направлении, но у меня попутно ещё вопросы:

значит, с точки зрения пользователя (программиста) виджета, должно происходить следующее (это мои догадки, их надо исправить в нужную сторону :) )

1) он получает в распоряжение модуль - в каком виде? Хедер+реализация+pro?
2) он компилирует pro'ект плагина, у него появляется *.dll и *.a (в винде. А не в винде?) в папке дизайнера + ему надо ещё закинуть исходники в проект, использующий этот виджет

так ?

Сообщение отредактировал Алексей1153 - 3.1.2011, 20:58
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 3.1.2011, 21:58
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Обычно картина выглядит так:
Разработал виджет
Затем решил его использовать во многих своих приложениях - сделал каталог с исходниками и для удобства туда pri-файл.
Затем решил, что не дурно бы этот виджет использовать в дизайнере - сделал обёртку к нему по правилам плагинов дизайнера.
Теперь этот виджет, не изменяя его, можно не только в коде использовать, но и в дизайнере.

Прочитай эту статейку
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 8.1.2011, 16:42
Сообщение #9


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


забыл отписаться о результатах вскрытия

в общем, схема вышла следующая:
имеется плагин X
исходники плагина положены в папку X, эту папку нужно скопировать в папку проекта, который будет ипользовать плагин
в папке плагина также лежит X.pri, в котором перечислены все инклуды в таком виде:
HEADERS+=./X/X.h
SOURCSE+=./X/X.cpp

в pro проекта (и в pro плагина тоже - для его сборки для дизайнера) нужно дописать

INCLUDEPATH+=X
include(X/X.pri)

собираем pro плагина. Дизайнер начинает понимать виджет
собираем проект-приёмник. Запускаем - всё нормально


и эту схему никак по другому не удаётся переделать - так и должно быть ?

ещё вопрос - как разрешать конфликты имён папок разных плагинов? Только уникальными названиями ?

Сообщение отредактировал Алексей1153 - 8.1.2011, 18:21
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 8.1.2011, 17:56
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Алексей1153 @ 8.1.2011, 18:42) *
эту папку нужно скопировать в папку проекта
нет не нужно, можно для плагинов отдельное место придумать, но тогда pri-файл должен выглядеть так:
HEADERS+=$$PWD/X/X.h
SOURCSE+=$$PWD/X/X.cpp

Переменная qmake $$PWD означает текущий каталог этого файла (т.е. данного pri-файла)

Цитата(Алексей1153 @ 8.1.2011, 18:42) *
как разрешать конфликты имён папок разных плагинов? Только уникальными названиями ?
с qmake главная проблема - одинаковые имена файлов, например, есть такие файлы
path/name.h
path/name.cpp
path/groupA/name.h
path/groupA/name.cpp

при компиляции получишь головняк. Т.к. qmake создаёт каталог для хранения объектников (например, debug) и там всё в одну кучу. А компилятор при компиляции cpp-файла создаёт одноимённый o-файл, т.е. получаем:
path/name.cpp => path/debug/name.o
path/groupA/name.cpp => path/debug/name.o

(при компиляции следующего name.cpp, предыдущий name.o будет перезаписан) :hang1:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V   1 2 3 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.12.2024, 21:12