Mapnik 在 Windows 10 下的源码编译指南
Mapnik 是一个用于构建地图应用程序的开源 C++ 库。在 Windows 环境下进行源码编译,由于依赖项众多且版本复杂,往往需要花费不少精力。以下整理了一套经过验证的编译流程,涵盖环境准备、依赖构建及最终打包步骤。
环境准备
首先确保开发机器上安装了必要的工具链。推荐使用 Visual Studio 2010(或兼容版本),配合 Git、Cygwin 以及 GnuWin32 工具集。
必备工具清单:
- Visual Studio 2010
- Git
- Cygwin (含 patch, curl, unzip 等)
- GnuWin32
注意:部分工具如
wget和curl在 Cygwin 环境中可用,若使用原生 CMD 请确保路径配置正确。
环境变量配置
编译前需设置好根目录及各类依赖的版本变量。建议将以下命令添加到系统环境变量或每次编译前在命令行中执行。
set PATH=%PATH%;c:\git\bin;c:\cygwin\bin;c:\GnuWin32\bin
set ROOTDIR=c:\dev2
cd %ROOTDIR%
mkdir packages
set PKGDIR=%ROOTDIR%/packages
:: 版本定义,需与实际下载包一致
set ICU_VERSION=4.8
set BOOST_VERSION=49
set ZLIB_VERSION=1.2.8
set LIBPNG_VERSION=1.5.17
set JPEG_VERSION=8d
set WEBP_VERSION=0.4.0
set FREETYPE_VERSION=2.4.9
set POSTGRESQL_VERSION=9.1.3
set TIFF_VERSION=4.0.0beta7
set PROJ_VERSION=4.8.0
set PROJ_GRIDS_VERSION=1.5
set GDAL_VERSION=1.9.0
set LIBXML2_VERSION=2.7.8
set PIXMAN_VERSION=0.28.2
set CAIRO_VERSION=1.12.14
set SQLITE_VERSION=3071100
set EXPAT_VERSION=2.1.0
set GEOS_VERSION=3.3.3
获取与解压依赖包
Mapnik 依赖约 18 个第三方库。可以通过脚本批量下载,若网络受限建议手动下载至 %PKGDIR% 目录。
:: 补丁文件
wget https://raw.github.com/mapnik/mapnik-packaging/master/windows/cairo-win32.patch --no-check-certificate
wget https://raw.github.com/mapnik/mapnik-packaging/master/windows/libxml.patch --no-check-certificate
cd %PKGDIR%
:: 核心依赖下载示例
curl http://iweb.dl.sourceforge.net/project/boost/boost/1.%BOOST_VERSION%.0/boost_1_%BOOST_VERSION%_0.tar.gz -O
curl http://www.zlib.net/zlib-%ZLIB_VERSION%.tar.gz -O
curl http://download.osgeo.org/gdal/gdal-%GDAL_VERSION%.tar.gz -O
:: ... 其他依赖依此类推 ...
cd %ROOTDIR%
依赖库编译
这是最耗时的一步。每个库都需要单独处理,部分库需要修改配置文件以适配 MSVC 编译器。
1. ICU 与 Boost
ICU 使用 msbuild 直接编译解决方案。Boost 则需要先 bootstrap 再指定 toolset 编译。
:: ICU 编译
bsdtar xvfz %PKGDIR%\icu4c-4_8_1_1-src.tgz
cd icu/
msbuild source\allinone\allinone.sln /t:Rebuild /p:Configuration="Release" /p:Platform=Win32
cd %ROOTDIR%
:: Boost 编译
bsdtar xzf %PKGDIR%/boost_1_%BOOST_VERSION%_0.tar.gz
cd boost_1_%BOOST_VERSION%_0
set BOOST_PREFIX=boost-%BOOST_VERSION%-vc100
bootstrap.bat
bjam toolset=msvc-10.0 --prefix=..\%BOOST_PREFIX% \
--with-thread --with-filesystem --with-date_time \
--with-system --with-program_options --with-regex \
--with-chrono -disable-filesystem2 \
-sHAVE_ICU=1 -sICU_PATH=%ROOTDIR%\icu \
release link=static install --build-type=complete


