Страница 1 из 2

Проблема с компиляцией плагина

Добавлено: 17 янв 2011, 16:55
SimpleMo
Доброго времени суток!
Я новичок в написании плагинов для QGIS => скачал coding-compilation-guide (прошу прощения ща мой английский, пишу название по памяти :oops: ).
В этом документе был пример плагина на C++. Создал я в QT проект, полностью перенёс текст плагина из документа в файлы, которые предписывалось создать и попробовал собратьпроет встроенным в QT компилятором и сборщиком. Если всё правильно понял, то это mingw32 и g++. В результате получаю ошибку: "символ @ не подходит для препроцессора". Нахожу место возникновения - qgsgeometry.h Удивляюсь :D , комментирую пару строк - другая ошибка: "Id: процесс завершился с кодом 1"
В целом так. Вопрос: что это может быть и что с этим делать?
Заранее благодарю за советы.
Текст плагина и ошибок добавлю через несколько минут.

Re: Проблема с компиляцией плагина

Добавлено: 17 янв 2011, 17:54
Дмитрий Барышников
Официально QGIS собирается под MS Visual C++. Соответственно библиотеки QGIS, скомпилированные под MS Visual C++, имеют другие зависимости чем ваш код скомпилированный под mingw32. Я думаю из-за этого.
This is currently also who the binary QGIS packages are made (earlier versions used MinGW).
http://www.qgis.org/wiki/Building_QGIS_ ... ual_Studio
Про плагины это отсюда я так понимаю?
http://www.qgis.org/wiki/Writing_C%2B%2B_Plugins

Re: Проблема с компиляцией плагина

Добавлено: 17 янв 2011, 19:36
SimpleMo
Bishop писал(а): http://www.qgis.org/wiki/Building_QGIS_ ... ual_Studio
Про плагины это отсюда я так понимаю?
http://www.qgis.org/wiki/Writing_C%2B%2B_Plugins
На самом деле, плагины я брал из этого документа qgis-1.5.0_coding-compilation_guide_en.pdf. Он во вложении. Вы советуете компилировать компилятором от Microsoft? А не будет ли при этом проблем с библиотеками QT?

Re: Проблема с компиляцией плагина

Добавлено: 17 янв 2011, 21:42
Voltron
QGIS для Windows собирается в MS Visual Studio, проблем нет. Почитайте статью про компиляцию QGIS для Windows.

Re: Проблема с компиляцией плагина

Добавлено: 17 янв 2011, 22:35
SimpleMo
Небольшое пояснение: мне НЕ нужно собирать QGIS. Мне нужно собрать плагин для QGIS.

Re: Проблема с компиляцией плагина

Добавлено: 17 янв 2011, 23:46
Voltron
Собирайте.
Я просто указал на то, что при сборке MSVC проблем с библиотеками Qt не возникает.

Re: Проблема с компиляцией плагина

Добавлено: 18 янв 2011, 12:53
Дмитрий Барышников
SimpleMo писал(а):Небольшое пояснение: мне НЕ нужно собирать QGIS. Мне нужно собрать плагин для QGIS.
Если вы откомпилируете QGIS хуже не будет. Зато все версии библиотек как QGIS, так и вашего плагина будут одинаковые.

Re: Проблема с компиляцией плагина

Добавлено: 19 янв 2011, 16:09
SimpleMo
Спасибо всем за советы!
Я поступил так, как вы все пишите, т.е согласно инструкции, на которую ссылается Voltron, скачал OSeo4W (QT у меня уже был установлен), скачал всё необходимое для компилятора MS Visual C++, скачал cmake и libintl. Кстати, заметил вот что: в инструкции сказано, что нужно в настойках VC++ указать папку c:\OSGeo4W\include\qt4, но у меня папки qt4 там просто нет...
Хорошо, выполнил настройки на соответствующие папки Qt4, установленного ранее.
Попытался запустить cmake. В итоге получил сообщение, что мой Qt скомпилирован mingw. Что можно с этим сделать?

Re: Проблема с компиляцией плагина

Добавлено: 19 янв 2011, 17:39
Дмитрий Барышников

Re: Проблема с компиляцией плагина

Добавлено: 19 янв 2011, 18:09
Voltron
SimpleMo писал(а):Кстати, заметил вот что: в инструкции сказано, что нужно в настойках VC++ указать папку c:\OSGeo4W\include\qt4, но у меня папки qt4 там просто нет...
Скорее всего, не установлен пакет qt4-devel.
Только что сделал чистую установку OSGeo4W, указанная папка присутствует.

Re: Проблема с компиляцией плагина

Добавлено: 19 янв 2011, 22:52
SimpleMo
Так и есть. Видимо, поменялась структура зависимостей в OSGeo4W - в инструкции я не нашёл указаний на необходимость отметки этого пакета. Указал его явно - всё появилось. Завтра буду пробовать компилировать и собирать плагин ещё раз.

Re: Проблема с компиляцией плагина

Добавлено: 20 янв 2011, 09:57
Voltron
Структура зависимостей в этом плане не менялась, просто вы немного невнимательны. В статье об этом сказано. См. раздел 2 «Ключевые зависимости», пункт 2
Дополнительно, в группе Libs выбираем пакеты:
fftw-devel, gdal16-python, grass-devel-vc, gsl-devel, libjpeg-devel, libpng-devel, libpng-devel-vc, llibtiff-devel, qt4-devel, zlib-devel

Re: Проблема с компиляцией плагина

Добавлено: 22 янв 2011, 18:23
SimpleMo
Доброго времени суток и спасибо за помощь! QGis мне собрать удалось. Попробовал собрать свой плагин на том же компиляторе. Всё равно идут ошибки на библиотеки QGis. Похоже, что-то я не подключил к проекту. Вопрос - что именно? Лог компилятора и CMakeLists.txt прилагаю.

Re: Проблема с компиляцией плагина

Добавлено: 23 янв 2011, 13:55
Voltron
Как я понял, модуль собираете отдельно, вне каталога QGIS. Попробуйте положить исходники в каталог src/plugins/<plugin_name> и добавить его в CMakeList.txt QGIS.

Еще можете попробовать добавить в свой CMakeList.txt

Код: Выделить всё

FIND_PACKAGE(QGIS REQUIRED)
IF (NOT QGIS_FOUND)
  MESSAGE (SEND_ERROR "QGIS dependency was not found!")
ENDIF (NOT QGIS_FOUND)
Правили поиска QGIS и пример использования можно посмотреть в svn

Re: Проблема с компиляцией плагина

Добавлено: 23 янв 2011, 15:30
SimpleMo
То есть, вы предлагаете собирать плагин вместе с QGIS?.. Попробую.
С момента написания моего последнего сообщения мне удалось побороть проблему со ссылками на библиотеки QGIS. Теперь они включаются в проект нормально. Кстати, добился я этого как раз используя код, который предлагает Voltron ;).
Натолкнулся теперь ещё на одну глюку: в процессе сборки в MS Visual C++ Express идут ошибки на генерированные QT4 файлы moc_<имя файла>.cxx. Система выдаёт сообщение о том, что dllimport не поддерживает статическое определение членов классов. Плагин, естественно, не собирается. Подскажите, что можно попробовать сделать с этим?
Заранее благодарю (в который раз ;)) за советы.

P.S. Товарищи гуру, скажите, это каждый раз такой напряг со сборкой плагинов возникает, или просто мне "повезло"?