Сборка GDAL 1.9.0 с использованием Visual Studio 2010

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Эта страница является черновиком статьи.


Сборка библиотеки GDAL 1.9.0 с использованием Visual Studio 2010

В мире все развивается и это касается так же программного обеспечения, а именно выходят новые версии библиотек и новые версии программ для разработки. Поэтому в данной статье речь пойдет о сборке библиотеки GDAL 1.9.0 на Visual Studio 2010.

Оглавление
  1. Краткая информация о структуре библиотеки GDAL
  2. Второй раздел
1. Краткая информация о структуре библиотеки GDAL

Библиотека GDAL состоит из 3-х частей: CPL
OGR
GDA

CPL - это базовые функции работы с файловой системой, строками, xml и т.п.
OGR это работа с геопространственными векторными форматами. Список поддерживаемых форматов можно посмотреть здесь: http://www.gdal.org/ogr/ogr_formats.html
GDAL - это работа с растровыми форматами. Список здесь: http://www.gdal.org/formats_list.html

OGR и GDAL обеспечивают не только поддержку форматов, но и операции работы с векторами и растрами. Т.е. GDAL позволяет не только считывать но и манипулировать с геоданными.

Теперь про зависимости. Компонент CPL (исходники лежат в подпапке port) зависит от библиотек: zlib, curl.
OGR зависит от многих библиотек, но базовый набор от expat, geos и proj.
GDAL зависит от tiff,jpeg, png.

Тут надо понимать что такое драйвер. Это отдельный плагин обеспечивающий поддержку формата из списка. В таблице http://www.gdal.org/formats_list.html можно посмотреть что от чего зависит. Иногда драйвер не зависит ни от чего и компилировать его просто. Иногда нужна еще отдельная библиотека или набор библиотек.

Коротко о сборке. В зависимости от необходимости можно собрать GDAL именно в той конфигурации, что нужна (с определенным перечнем драйверов).
Собирать будем пошагово: вначале все зависимые библиотеки, затем сам GDAL. Для простоты предлагаю делать это все с использованием системы сборки CMake.
Суть в том что для большинства библиотек разработаны скрипты CMake и сборка становится однотипной и простой. Заодно на выходе будут привычные проекты Visual Studio, где можно залезть в свойсnва и посмотреть, что и как.

Первой библиотекой будем компилировать expat.
Первое: скачиваем систему сборки cmake http://www.cmake.org/files/v2.8/cmake-2.8.7-win32-x86.exe и ставим ее.
Второе: берем файл отсюда http://sourceforge.net/projects/expat/files/expat/2.0.1/ под названием expat-2.0.1.tar.gz - это последняя стабильная версия на 20.03.2012 и распаковываем в папку где у нас будут храниться все проекты для сборки библиотек, например сюда C:\project\expat-2.0.1\. Обратите внимание, что эта и все последующие папки должны быть разархивированы так, что в конечной папке, в данном случае expat-2.0.1, должны лежать различные папки и файлы (см. Рис. 1), а не вложенная папка expat-2.0.1(для данного примера).

Рис. 1

Третье: скачиваем фаил CMakeLists.txt Файл:CMakeLists.zip и помещаем в разархивированную папку expat-2.0.1.

Далее запускаем CMake и указываем два пути: Where is the source code - это то, куда вы разархивировали expat, например C:/project/expat-2.0.1 и Where to build the binaries – это та папка, куда сгенерируются файлы проекта C:/project/expat-2.0.1/build. Нажимаем кнопку Configure и выбираем версию Visual Studio(в нашем случае Visual Studio 2010), если выдаст ошибку, нажимаем еще раз. После нажимаем кнопку Generate (см. Рис. 2).

Рис. 2

В папке build должен появиться фаил libexpat.sln. Открываем его с помощью Visual Studio, выставляем сверху Тип сборки Release вместо Debug (см Рис. 3) и компилируем проект(нажимаем F7).

Рис. 3

После этого в папке C:/projects/expat-2.0.1/lib/Release (далее все скомпилированные библиотеки будем класть в схожие папки lib/Release) должны появиться следующие файлы libexpat.dll
libexpat.exp
libexpat.lib

Это мы скомпилировали так называему shared dll. Есть еще Static dll - тогда на выходе только libexpat.lib. Потом libexpat.dll надо будет скопировать в папку с вашей программой. Туда надо будет кидать все зависимые библиотеки.

Далее делаем тоже самое для zlib, качаем ее отсюда http://zlib.net/zlib126.zip CmakeLists.txt в архив уже включена. Разархивируем C:\project\zlib-1.2.6
При нажатии на кнопку Configure в самом конце cmake напишет следующее сообщение: CMake Error at CMakeLists.txt:65 (message):

 You must remove C:/project/zlib-1.2.6/zconf.h from the
 source tree.  This file is included with zlib but CMake generates this file
 for you automatically in the build directory.

Здесь говорится, что нужно стереть файл C://project/zlib-1.2.6/zconf.h т.к. он сгенерил новый. После того как сотрете опять нажимайте Configure, процесс должен закончиться без ошибок, после запускайте Generate. Далее идем в папку build и открываем файл zlib.sln с помощью Visual Studio(далее VS), ставим Release. А так же заходим в меню в пункт Построение и выбираем диспетчер конфигураций, после этого снимаем галочки с examles и minizip они нам не понадобятся (Рис. 4), если же будут нужны, необходимо в свойствах этих проектов прописать путь к zlib.h.

Рис. 4

После всего этого компилируем проект и получаем 3 файла в папке C:/project/zlib-1.2.6/Debug/Release. Перенесем их в папку C:/project/zlib-1.2.6/lib/Release для унификации, эту папку необходимо создать самим.

Далее соберем библиотеку geos. Качаем отсюда http://trac.osgeo.org/geos/ последнюю версию http://download.osgeo.org/geos/geos-3.3.2.tar.bz2 . Извлекаем в C:\project\geos-3.3.2 . Делаем конфигурацию в CMake, после этого в разделе Ungrouped Entries убираем калочку с BUILD_TESTING (см. Рис. 5). Примечание, чтобы у вас появился раздел Ungrouped Entries, поставьте галки в Grouped и Advanced (см. Рис. 5).

Рис. 5

Далее нажимаем Generate и открываем в VS файл C:\project\geos-3.3.2\build\geos.sln , выставляем Release и компилируем. Если у вас возникла ошибка
Ошибка 1 error C2668: log: неоднозначный вызов перегруженной функции C:\project\geos-3.3.2\src\operation\buffer\BufferOp.cpp 97 1 geos-static
кликните по ней 2 раза мышкой и в открывшемся файле замените строчку
int bufEnvPrecisionDigits = (int) (std::log(bufEnvMax) / std::log(10) + 1.0);
на
int bufEnvPrecisionDigits = (int) (std::log(bufEnvMax) / std::log(10.0) + 1.0);
и скомпилируйте заново.
Далее если возникла ошибка
Ошибка 1 error C2039: toupper: не является членом "std" C:\project\geos-3.3.2\tests\unit\capi\GEOSisValidDetailTest.cpp 60 1 geos_unit
кликните по ней 2 раза мышкой и в открывшемся файле сверху припишите #include <ctype.h>, а вместо
str[i] = std::toupper(str[i]);
напишите
str[i] = toupper(str[i]);
и скомпилируйте еще раз. После того как все закончится успешно скопируйте файлы из папки C:\project\geos-3.3.2\build\lib\Release в папку C:\project\geos-3.3.2\lib\Release.

Далее соберем curl. Качаем отсюда http://curl.haxx.se/download.html последнюю версию http://curl.haxx.se/download/curl-7.24.0.zip и разархивируем в C:\project\curl-7.24.0. Идем в CMake, указываем пути и нажимаем Configurate. Далее прописываем в
WSOCK32_LIBRARY - WSOCK32.lib
WS2_32_LIBRARY - WS2_32.lib
в ZLIB_INCLUDE_DIR прописываем два пути через точку запятую:
C:\project\zlib-1.2.6;C:\project\zlib-1.2.6\build
в ZLIB_LIBRARY прописываем путь до zlib.lib
C:\project\zlib-1.2.6\lib\Release\zlib.lib
И последнее расставляем галочки как на скриншоте, см. Рис. 6:

Рис. 6

После того как все будет сделано, нажимайте Configurate, все должно закончиться без ошибок и потом Generate. Далее открываем файл CURL.sln в папке build. Заходим в свойства проекта (для этого в Обозревателе решений надо выбрать libcurl)(Проект -> Свойства), далее Свойства конфигурации -> Компоновщик -> Ввод, далее в окне справа Дополнительные зависимости, нажимаем Изменить и удаляем
WSOCK32_LIBRARY-NOTFOUND
WS2_32_LIBRARY-NOTFOUND
Нажимаем применить и ОК, далее компилируем проект. После успешной компиляции помещаем файлы из папки C:\project\curl-7.24.0\build\lib\Debug в папку C:\project\curl-7.24.0\lib\Realese

Далее будем собирать ibjpeg - брать здесь http://www.ijg.org/ последнюю версию http://www.ijg.org/files/jpegsr8d.zip . CMakeLists скачиваем тут Файл:CMakeListsjpeg.zip и разархивируем, кладем в папку C:\project\jpeg-8d.
Запускаем CMAke и делаем configurate, затем Generate. Идем в папку Debug, открываем libjpeg.sln, ставим Realese и компилируем.

Далее будем собирать libpng - брать здесь http://www.libpng.org/pub/png/libpng.html последнюю версию http://download.sourceforge.net/libpng/lpng159.zip . Разархивировать, запустить CMake, произвести конфигурацию. Прописываем пути для ZLIB_INCLUDE_DIR и ZLIB_LIBRARY-NOTFOUND как делали это выше. Нажимаем Configurate и Generate, далее открываем libpng.sln, ставим Release и компилируем. Файлы из папки C:\project\lpng159\build\Release переносим в C:\project\lpng159\lib\Release.

Дальше собираем libtiff - брать здесь ftp://ftp.remotesensing.org/pub/libtiff последнюю версию ftp://ftp.remotesensing.org/pub/libtiff/tiff-4.0.1.zip , разархивируем C:\project\tiff-4.0.1, качаем CMakeLists и еще пару файлов и разархивируем как обычно Файл:Tiff.zip. Запускаем CMakt, делаем Configurate и прописываем пути для ZLIB_INCLUDE_DIR и ZLIB_LIBRARY-NOTFOUND как делали это выше. Нажимаем Configurate и Generate, далее открываем libtiff ставим Release и компилируем.

Последняя из этих библиотек proj - брать здесь http://trac.osgeo.org/proj/ последнюю версию http://download.osgeo.org/proj/proj-4.8.0.zip . Разархивируем, кидаем туда этот фаил Файл:CMakeListsproj.zip, запускаем CMake, прописываем пути до proj, жмем Configurate и Generate, открываем proj4, ставим Release и компилируем.

На этом вся подготовка закончена, у нас есть все необходимые библиотеки.


Текст статьи Пример кода программы/html и т.п. 2. Второй раздел Текст статьи Еще один пример текста программы с сохранением переносов Таблица Заголовок Заголовок Заголовок текст текст текст

Ссылки по теме • Ссылка на дополнительный источник информации внутренняя • Ссылка на дополнительный источник информации внешняя Дата создания: 04.07.2010 Автор(ы): Боровенский Евгений(LEXX413), Дмитрий(Bishop)