跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++

Mapnik 在 Windows 10 下的源码编译指南

Windows 平台下编译 Mapnik 涉及大量依赖库配置,包括 Boost、ICU、GDAL 等近二十个组件。详细记录了从环境搭建、变量设置到逐个编译依赖库的全过程,重点说明了 VS2010 命令行工具的使用及关键路径修正方法。完成依赖构建后,通过官方 packaging 脚本即可完成 Mapnik 源码编译,最终生成 mapnik.dll 与 mapnik.lib 即表示成功。该过程较为繁琐,适合有经验的开发者参考实践。

SecGuard发布于 2025/1/21更新于 2026/9/1772 浏览
Mapnik 在 Windows 10 下的源码编译指南

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

2. 图形与图像库 (WebP, JPEG, FreeType, PNG, Tiff, Pixman, Cairo)

这些库通常涉及 NMake 或 MSBuild。需注意路径引用和头文件包含顺序。

:: WebP & JPEG
unzip %PKGDIR%\libwebp-%WEBP_VERSION%-windows-x86.zip
rename libwebp-%WEBP_VERSION%-windows-x86 webp
unzip %PKGDIR%\jpegsr%JPEG_VERSION%.zip
rename jpeg-%JPEG_VERSION% jpeg
cd jpeg
nmake /f Makefile.vc nodebug=1
cd %ROOTDIR%

:: FreeType
bsdtar xfz "%PKGDIR%\freetype-%FREETYPE_VERSION%.tar.gz"
rename freetype-%FREETYPE_VERSION% freetype
cd freetype
msbuild builds\win32\vc2010\freetype.sln /p:Configuration=Release /p:Platform=Win32
move objs\win32\vc2010\freetype249.lib freetype.lib
cd %ROOTDIR%

:: LibPNG
bsdtar xvfz %PKGDIR%\libpng-%LIBPNG_VERSION%.tar.gz
rename libpng-%LIBPNG_VERSION% libpng
cd %ROOTDIR%\libpng\projects\vstudio\
msbuild vstudio.sln /t:Rebuild /p:Configuration="Release" /p:Platform=Win32
cd %ROOTDIR%\libpng
move projects\vstudio\Release\libpng15.lib libpng.lib
move projects\vstudio\Release\zlib.lib ..\zlib-1.2.5\zlib.lib
cd %ROOTDIR%

:: Tiff (需修改 nmake.opt 开启 JPEG/ZLIB 支持)
bsdtar xvfz %PKGDIR%\tiff-%TIFF_VERSION%.tar.gz
rename tiff-%TIFF_VERSION% tiff
cd tiff
:: 此处省略 sed 替换逻辑,确保 nmake.opt 中 JPEG_SUPPORT 和 ZIP_SUPPORT 为 1
nmake /f Makefile.vc
cd %ROOTDIR%

:: Pixman & Cairo
bsdtar xvfz %PKGDIR%\pixman-%PIXMAN_VERSION%.tar.gz
rename pixman-%PIXMAN_VERSION% pixman
cd pixman\pixman
make -f Makefile.win32 "CFG=release"
cd %ROOTDIR%

:: Cairo 编译前需修改 build\Makefile.win32.features 和 .common
:: 确保 CAIRO_HAS_FT_FONT=1,并修正 zlib 和 freetype 路径
set INCLUDE=%INCLUDE%;%ROOTDIR%\zlib-1.2.5
set INCLUDE=%INCLUDE%;%ROOTDIR%\libpng
set INCLUDE=%INCLUDE%;%ROOTDIR%\pixman\pixman
set INCLUDE=%INCLUDE%;%ROOTDIR%\cairo\boilerplate
set INCLUDE=%INCLUDE%;%ROOTDIR%\cairo
set INCLUDE=%INCLUDE%;%ROOTDIR%\cairo\src
set INCLUDE=%INCLUDE%;%ROOTDIR%\freetype\include
make -f Makefile.win32 "CFG=release"
del src\cairo-version.h
cd %ROOTDIR%

3. 数据库与 XML 库 (PostgreSQL, LibXML2, SQLite, Proj4, GEOS)

这部分主要涉及 NMake 和 CMake。

:: PostgreSQL (libpq)
bsdtar xvfz "%PKGDIR%\postgresql-%POSTGRESQL_VERSION%.tar.gz"
rename postgresql-%POSTGRESQL_VERSION% postgresql
cd postgresql\src
nmake /f win32.mak
:: 若遇到 mt.EXE 错误可忽略,只要生成 libpq.lib 即可
cd %ROOTDIR%

:: LibXML2
cscript configure.js compiler=msvc prefix=%ROOTDIR%\libxml2 iconv=no icu=yes include=%ROOTDIR%\icu\include lib=%ROOTDIR%\icu\lib
patch -p1 < %ROOTDIR%\libxml.patch
nmake /f Makefile.msvc
cd %ROOTDIR%

:: Proj4
bsdtar xfz %PKGDIR%\proj-%PROJ_VERSION%.tar.gz
rename proj-%PROJ_VERSION% proj
cd proj\nad
unzip -o ../../packages/proj-datumgrid-%PROJ_GRIDS_VERSION%.zip
cd ..
nmake /f Makefile.vc
cd %ROOTDIR%

:: GDAL
bsdtar xvfz %PKGDIR%\gdal-%GDAL_VERSION%.tar.gz
mkdir gdal
rename gdal-%GDAL_VERSION% gdal\gdal
cd gdal\gdal
:: 手动修改 nmake.opt 中的 EXPAT_DIR 路径
nmake /f makefile.vc MSVC_VER=1600
cd %ROOTDIR%

:: SQLite
unzip %PKGDIR%\sqlite-amalgamation-%SQLITE_VERSION%.zip
rename sqlite-amalgamation-%SQLITE_VERSION% sqlite

:: Protobuf
:: 下载 protobuf-2.5.0.zip 后解压,运行 vcupgrade 转换项目文件
msbuild libprotobuf-lite.vcxproj /p:Configuration="Release" /p:Platform=Win32
extract_includes.bat
cd %ROOTDIR%

:: GEOS
bsdtar xvf %PKGDIR%\geos-%GEOS_VERSION%.tar.bz2
rename geos-%GEOS_VERSION% geos
cd geos\mkdir build
cd build
cmake -G "NMake Makefiles" ..
nmake /f Makefile geos
cd %ROOTDIR%

编译 Mapnik 主程序

完成所有依赖后,即可开始编译 Mapnik 本身。

  1. 克隆源码:
git clone https://github.com/mapnik/mapnik.git -b 2.3.x mapnik
cd %ROOTDIR%\mapnik
  1. 使用官方提供的 packaging 脚本辅助编译:
git clone https://github.com/mapnik/mapnik-packaging.git
cd mapnik-packaging\windows
  1. 修改 build_mapnik.bat 中的路径,确保指向你刚才编译好的依赖库位置。

  2. 运行批处理脚本开始编译。

验证结果

编译成功后,应在输出目录中找到 mapnik.dll 和 mapnik.lib 文件。这标志着核心库已就绪,可以链接到你的项目中。

提示:整个流程涉及大量依赖库的版本匹配和路径配置,过程中可能会遇到各种编译报错。建议保持耐心,根据具体错误信息调整配置。Linux 下编译相对简单(可使用 apt 安装依赖),但在 Windows 上手动管理依赖是必经之路。

目录

  1. Mapnik 在 Windows 10 下的源码编译指南
  2. 环境准备
  3. 环境变量配置
  4. 获取与解压依赖包
  5. 依赖库编译
  6. 1. ICU 与 Boost
  7. 2. 图形与图像库 (WebP, JPEG, FreeType, PNG, Tiff, Pixman, Cairo)
  8. 3. 数据库与 XML 库 (PostgreSQL, LibXML2, SQLite, Proj4, GEOS)
  9. 编译 Mapnik 主程序
  10. 验证结果

更多推荐文章

查看全部
  • 拿AI工具写论文:六个阶段实用心得
  • Python 多环境管理工具 pyenv-win 安装与使用
  • 从三年前端到韩国读研:我的得失与回归前端的思考
  • 基于 OpenClaw 与飞书搭建服务器运维机器人
  • AI 辅助游戏开发:基于 DeepSeek 构建贪吃蛇游戏
  • GitHub 访问加速的 8 种常用方案与配置指南
  • Windows 11 开启 WSL 完整指南
  • OpenClaw 集成百度网页搜索技能:安装与配置
  • Qt Creator 配置 GitHub Copilot 插件
  • C++ 内存管理进阶:从裸指针到智能指针
  • GitHub 私有仓库转换为公共仓库的操作指南
  • Stable Diffusion v1.5 实战:电商海报与创意图像生成指南
  • 记一次 VS Code Remote WSL 中 Copilot 代理问题的修复
  • AIGC 时代下的模型上下文协议 MCP 详解
  • 基于FPGA的五级积分梳状CIC滤波器Verilog设计
  • Flutter jwt_io 库在 OpenHarmony 上的适配指南
  • 安路科技 TD 开发工具全流程使用指南
  • C 语言实现大根堆:从原理到代码详解
  • CentOS 升级 GCC 至 10.1.0 源码编译指南
  • C++ 引用、内联函数与 nullptr 详解

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online