GIS-Lab Изграждане на QGIS с възможност за отстраняване на грешки в Visual C Express Edition 2008 или Qt Creator
Географски информационни системи и дистанционно наблюдение
Как да компилирам QGIS в Windows и да активирам отстраняване на грешки
Лесното отстраняване на грешки е едно от условията за нормално развитие на софтуер или модули за разширение. В края на краищата, под дебъгера е много по-лесно да се разбере поведението на програмата и да се уловят възможни грешки, тъй като аномалното поведение или регистриране не винаги дава адекватна представа за поведението на програмата с определени данни. Много често, когато се появи неправилно поведение на програмата, питам за данните, на които това се случва, и гледам в дебъгера поведението на програмата.
Тази статия ще се фокусира върху отстраняването на грешки в Quantum GIS GIS с отворен код (QGIS) в операционната система Windows.
Съдържание
[редактиране] Въведение
Quantum GIS е безплатна междуплатформена географска информационна система, създадена с помощта на инструментариума Qt. Qt е инструментариум за разработка на софтуер за различни платформи на езика за програмиране C ++, чиято отличителна черта е използването на Meta Object Compiler (MOC) - система за предварителна обработка на изходния код (като цяло Qt е библиотека не за чист C ++, а за неговия специален диалект, от който MOC и "превежда" кода за последваща компилация от всеки стандартен C ++ компилатор). Помощната програма MOC търси в заглавните файлове на C++ дефиниции на класове, съдържащи макроса Q_OBJECT, и създава допълнителен изходен файл на C++, съдържащ метаобектния код.
За компилиране и отстраняване на грешки ще използваме самобезплатни инструменти: Microsoft Visual Studio Express 2008 и Qt Creator 2.1.
След проучване на въпроса стана ясно, че е почти завършенлипсата на нормална методология за компилиране и отстраняване на грешки под Windows (доколкото разбирам, основното развитие се извършва в Linux OS). Въпреки че има раздел Изграждане на Windows на официалния сайт в Wiki и техниката, описана там (между другото, тя работи) ви позволява да компилирате QGIS и дори да го стартирате в режим на отстраняване на грешки. Но ако направите промени в изходните кодове, тогава ще трябва да генерирате повторно проекти под Visual Studio чрез системата за изграждане на CMake (поради MOC). В случай на пълноценно Microsoft Visual Studio и специална QT Visual Studio добавка, няма такъв проблем, но това вече е платен софтуер.
[редактиране] Подготовка
Първо, изтеглете и инсталирайте 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), в даден момент той ще запише в полето „Пътища на символи“ пътя до онлайн базата данни със символи на 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 е библиотека, която разширява стандартната библиотека на C++. Необходимо е, ако искате да използвате 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 ще провери конфигурацията и ще зададе въпроси относно наличието на определени необходими компоненти (маркирани в червено). За да направите това, щракнете върху „Конфигуриране“ и посочете компилатора „NMake Makefiles“ и оставете отметката „Използване на оригинални компилатори по подразбиране“. Ще опиша моята конфигурация.
Важно!Ако имате няколко параметъра (тъй като аз имам 3 от wxGISGDAL вместо един GDAL), тогава параметрите са разделени с точка и запетая.
За да не изпусна файла unistd.h от GnuWin32, добавих следния ред към файла CMakeLists.txt:
Също така във файловете D:\work\projects\qgis\src\analysis\CMakeLists.txt иD:\work\projects\qgis\src\core\CMakeLists.txt е добавен в края на раздела
Конфигурирането трябва да премине без грешки. След това стъпките за Visual Studio Express и Qt Creator са различни.
[редактиране] MS Visual Studio Express
В Visual Studio Express създайте нов проект от типа Makefile и без да конфигурирате нищо, щракнете върху Готово.
След това отидете на свойствата на създадения проект и напишете в секцията NMake (като вземете предвид вашите пътища, разбира се):
В подразделКоманден ред за изграждане
В подразделRebuild All Command Line
В подразделПочистване на командния ред
В подразделИзход
След това добавяме изходни текстове към проекта за задаване на точки на прекъсване (по принцип проектът ще се компилира без изходни кодове, но няма да е възможно да се отстранят грешки). Натиснете 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 файлове (вижте по-горе за състава на библиотеките). Също така създаваме папка с плъгини и прехвърляме компилираните QGIS плъгини. Ако QGIS стартира, можете да отстранявате грешки. Задайте точка на прекъсване и натиснете F5. Трябва да получите следното