GIS-Lab Складання QGIS з можливістю налагодження у Visual C Express Edition 2008 або Qt Creator
Географічні інформаційні системи та дистанційне зондування
Як скомпілювати QGIS під Windows та забезпечити можливість налагодження
Однією з умов нормальної розробки програмного забезпечення або модулів розширення є простота налагодження. Адже під налагоджувачем набагато простіше зрозуміти поведінку програми та відловити можливі помилки, тому що аномальна поведінка чи логування не завжди дає адекватне уявлення про поведінку програми з тими чи іншими даними. Дуже часто, коли виникає неправильна поведінка програми, я прошу дані, на яких це відбувається і дивлюся у відладчику на поведінку програми.
У цій статті йтиметься про налагодження ГІС з відкритим вихідним кодом Quantum GIS (QGIS) в операційній системі Windows.
Зміст
[ред.] Вступ
Quantum GIS – вільна кросплатформова геоінформаційна система, створена за допомогою інструментарію Qt. Qt - крос-платформний інструментарій розробки ПЗ мовою програмування С++, відмінна риса якого - використання Meta Object Compiler (MOC) - попередньої системи обробки вихідного коду (загалом, Qt - це бібліотека не для чистого C++, а для його особливого діалекту, з якого MOC і «переводить» код для подальшої компіляції будь-яким стандартним C++ компілятором). Утиліта MOC шукає у заголовних файлах на C++ описи класів, що містять макрос Q_OBJECT, і створює додатковий вихідний файл на C++, що містить мета-об'єктний код.
Для компіляції та налагодження будемо використовувати лишевільні інструменти: Microsoft Visual Studio Express 2008 та Qt Creator 2.1.
Після вивчення питання з'ясувалося практично повневідсутність нормальної методики з компіляції та налагодження під Windows (як зрозумів основна розробка ведеться в ОС Linux). Хоча на офіційному сайті у Wiki є розділ Building on Windows, і описана там методика (до речі, робоча) дозволяє скомпілювати QGIS і навіть запустити в режимі налагодження. Але якщо ви внесете зміни до вихідних кодів, то вам доведеться заново через систему складання CMake згенерувати проекти під Visual Studio (через MOC). У разі повноцінної Microsoft Visual Studio та спеціального доповнення QT Visual Studio Add-in такої проблеми немає, але це вже платний софт.
[ред.] Підготовка
Насамперед скачаємо і встановимо Visual Studio Express.
Для компіляції QGIS я вирішив використовувати заздалегідь скомпіловані бібліотеки від Qt під Windows для Visual Studio 2008 (забираємо тут). Це заощадить час на компіляцію Qt (кажуть ця процедура може тривати більше 5 годин). Не залишаючи сайт закачуємо і Qt Creator.
Крім того, для збирання необхідні:
- CMake
- Flex (ставити тільки шляхом без пробілів!)
- Bison (ставити тільки шляхом без пробілів!)
Завантажуємо та встановлюємо.
Крім того, для налагодження Qt Creator необхідний CDB (з пакета MS Debugging Tools). Беремо тут.
Важливо!Після налаштування відладчика в Qt Creator (Інструменти → Параметри → Відладчик → CDB) в якийсь момент він пропише в полі «Шляхи до символів» шлях до on-line БД символів Microsoft (починається на http: //). Рекомендуємо видалити його, оскільки його присутність викликає неймовірні затримки при налагодженні.
На цьому етапі у нас буде все необхідне програмне забезпечення для збирання та налагодження QGIS.
Наступним кроком є завантаження та збирання бібліотек від яких залежить QGIS.
[ред.]Складання бібліотек
Ми будемо компілювати та налагоджувати QGIS у мінімально можливій конфігурації. Для цього потрібні такі бібліотеки.
- expat — бібліотека потрібна для роботи з XML. У корені лежить expat.dsw, який нормально відкривається студією і компілюється. Я компілював проект expatw (статично бібліотека також скомпілювалася, але відмовилася підключатися). Рекомендую встановити змінне середовище EXPAT на папку, куди ви розпакували expat.
- zlib — бібліотека потрібна для пакування/розпакування. У папці zlib-1.2.5 contrib vstudio vc9 знайдеться проект під студію. Рекомендую встановити змінне середовище ZLIB на папку, куди ви розпакували zlib.
- iconv — потрібна бібліотека для перетворення кодувань рядків. Для компіляції Visual Studio довелося діяти за інструкцією звідси. Рекомендую встановити змінне середовище ICONV на папку, куди ви розпакували iconv.
- curl - бібліотека для протоколів Інтернету (http, ftp та ін). Компілював лише підтримку HTTP без SSL. Рекомендую встановити змінне середовище CURL на папку, куди ви розпакували curl.
- geos - бібліотека для операцій із геометрією. Рекомендую встановити змінне середовище GEOS на папку, куди ви розпакували geos.
- proj4 - бібліотека для операцій з проекціями та перетворень систем координат. Рекомендую встановити змінне середовище PROJ на папку, куди ви розпакували proj4.
- boost – бібліотека розширює стандартну бібліотеку С++. Потрібна, якщо необхідно використовувати підтримку KML у GDAL/OGR. Компіляція не потрібна. Слід встановити змінне середовище BOOST_ROOT на папку, куди ви розпакували boost.
- gdal – бібліотека для роботи з великою кількістю растрових та векторних геопросторових форматів. Я закачав через TortoiseSVNальтернативний (свій) варіант звідси. Єдине там є зав'язки на wxWidgets (wxzlib і wxexpat), які треба поміняти на відповідні бібліотеки zlib і expat.
- qwt5 — бібліотека віджетів для програмування програм, що мають технічну спрямованість. Збирав як написано в install.txt у секції під Windows – проблем не виникло.
Усі бібліотеки я компілював у Visual Studio Express 2008.
[ред.] Підготовка до складання QGIS
Після компіляції всіх перерахованих вище бібліотек у вас повинні бути як мінімум файли *.lib, а ще (в основному) і *.dll. Крім того, потрібно знати, де лежать ще й заголовні файли. Це знадобиться на етапі підготовки до збирання в CMake.
На даному етапі, настав момент для завантаження вихідників QGIS. Я зробив це за допомогою TortoiseSVN взявши їх звідси (https://svn.osgeo.org/qgis/trunk/qgis).
Для підготовки до збірки необхідно запустити CMake і вказати шлях до папки, де знаходяться вихідні QGIS, а також шлях до папки, в якій запишеться конфігурація (краще вказувати нову папку щоб не змішувати вихідні дані та згенеровані).

При цьому Cmake перевірить конфігурацію і ставитиме питання про наявність тих чи інших необхідних компонентів (позначено червоним). Щоб це сталося, натискаємо «Configure» і вказуємо компілятор «NMake Makefiles» і залишаємо позначку «Use default native compilers». Опишу конфігурацію.
Важливо!Якщо у вас кілька параметрів (як у мене замість однієї бібліотеки GDAL є 3 з wxGISGDAL), то параметри поділяються крапкою з комою.
Щоб не скидати файл unistd.h зі складу GnuWin32 я у файлі CMakeLists.txt вніс такий рядок:
Крім того у файли D:worksprojectsqgissrcanalysisCMakeLists.txt іD:\work\projects\qgis\src\core\CMakeLists.txt додав у кінець розділу
Configure має проходити без помилок. Далі кроки для Visual Studio Express та Qt Creator відрізняються.
[ред.] MS Visual Studio Express
У Visual Studio Express створюємо новий проект типу Makefile і нічого не налаштовуючи тиснемо Finish.
Далі заходимо у властивості створеного проекту та в розділі NMake пишемо (враховуючи ваші шляхи природно):
У підрозділіBuild Command Line
У підрозділіRebuild All Command Line
У підрозділіClean Command Line
У підрозділіOutput
Далі в проект додаємо вихідні тексти для установок точок зупинки (в принципі, проект і без вихідних скомпілюється, але налагоджувати його не вийде). Тиснемо F7 і дивимося помилки компіляції. Якщо помилок немає, необхідно скинути у створену папку %BUILD_DIR%, куди скомілювалися наші файли QGIS, пов'язані бібліотеки. У мене їхній склад такий:
- geos_c.dll
- iconv.dll
- libcurl.dll
- libeay32.dll
- libexpat.dll
- libiconv-2.dll
- libintl-8.dll
- libpq.dll
- msvcm90d.dll
- msvcp90d.dll
- msvcr90.dll
- msvcr90d.dll
- proj4.dll
- qwt5.dll
- ssleay32.dll
- wxgiscpl.dll
- wxgisgdal.dll
- wxgisogr.dll
- zlibwapi.dll
Жирним виділені бібліотеки, які необхідні у разі якщо GDAL скомпільований за допомогою PostGIS.
На цьому етапі QGIS повинен запускатися, для цього тиснемо F5. Якщо запуститься, то можна налагоджувати. Крім того, при запуску буде деяка лайка на відсутні директорії, які можна взяти з установки QGIS. Також я створив папку%BUILD_DIR%/plugins куди переніс скомпіловані плагіни QGIS.
Для налагодження ставимо точку зупинки і тиснемо знову ж таки F5. У мене вийшло таке

[ред.] Qt Creator
Для налагодження Qt Creator робимо наступне.
Вибираємо "Відкрити файл або проект" і вибираємо файл CMakeListst.txt, а як вихідний директорії вказуємо тугіше, що і в CMake. Далі компілюємо та виправляємо помилки компіляції, якщо вони є.
Якщо помилок немає, необхідно скинути у створену папку, куди скомілювалися наші файли QGIS, пов'язані бібліотеки (склад бібліотек див. вище). Також створюємо папку plugins та переносимо скомпіловані плагіни QGIS. Якщо QGIS запускається можна налагодити. Ставимо точку зупинки і тиснемо F5. Повинно вийти наступне