如何在windows下编译cairo

cairo 是一个免费的矢量绘图软件库,它可以绘制多种输出格式。cairo 支持许多平台,如 Linux、BSD、OSX等,当然,还有 Windows。
cairo 官网提供了在 windows 下的编译方法,详情可戳这里。尽管它给出了看起来很详细的步骤,但在实际编译中,你有可能会遇到各种各样的问题。

我们先从官网的步骤开始。

  1. 下载并编译 zlib .

  2. 下载并编译 libpng .

  3. 安装 MozillaBuild编译环境。( 注意安装路径下不要有空格) .

  4. 找到 MozillaBuild 的安装路径,找到 VC++ 对应版本的启动脚本,如 start-shell-msvc2015.bat,按官网给出的方式进行修改,定义出 zlib \ libpng 等 lib、include 等的路径 .

  5. 运行修改后的 bat,到 pixman 所在路径下,运行 make 命令进行编译 .

1
make -f Makefile.win32 CFG=release

进行到这一步的时候,基本就无法进行下去了。因为在这一步开始就会出现各种各样的错误
下面我们将从这里开始,一步一步完成cairo的编译。

1. 修改MozillaBuild脚本:

  • 打开 VS 版本对应的 bat 文件,注意 MOZ_MSVCBITS 的值 :这里将值改为 32。我们将编译 32 位版本。

  • 打开 start-shell.bat 。在 “REM Reset some env vars and set some others.” 内容下方,按照官网上给出的方式,指定 zlib, libpng 的 lib 和 include 所在路径。

  • 如果你的PC是 64 位,那么 MozillaBuild 会默认使用 64 的 VS 进行编译,可能会引发平台不匹配的问题。此时需要将 “REM Prepend MSVC paths.” 下面的

1
SET TOOLCHAIN=64-bit cross-compile

改为

1
SET TOOLCHAIN=32-bit cross-compile

2. 修改 pixman-version.h.in

进入 pixman/pixman 文件夹下,修改 @PIXMAN_VERSION_MAJOR@ , @PIXMAN_VERSION_MINOR@ , @PIXMAN_VERSION_MICRO@ 的值为对应的版本号。

这里有一份修改好的文件,版本号为 0.35.1 ,可直接取用

1
git clone https://git.oschina.net/wandoer/pixmanversionheader.git

3. 编译pixman

运行 start-shell-msvc2015.bat ,转到 pixman 路径下,运行

1
make -f Makefile.win32 CFG=release

如果成功,则 pixman/pixman 路径下有 release 文件夹,内有 pixman-1.lib

4. 修改Makefile.win32.common

在 cairo/build/ 路径下找到 Makefile.win32.common 文件,指定 zlib 和 libpng 所在的路径( ZLIB_PATH 和 LIBPNG_PATH)。

修改 zdll.lib 为 zlib.lib。

5. 编译 cairo

转到 cairo/ 路径下运行命令:

1
make -f Makefile.win32 CFG=release

如不出意外,此步应编译成功

6. 提取 include 头文件

在 cairo/ 路径下,添加以下脚本并执行:

1
2
3
4
5
6
7
8
9
10
mkdir -vp include
cp ./src/cairo-features.h include/
cp ./src/cairo.h include/
cp ./src/cairo-deprecated.h include/
cp ./src/cairo-win32.h include/
cp ./src/cairo-script.h include/
cp ./src/cairo-ps.h include/
cp ./src/cairo-pdf.h include/
cp ./src/cairo-svg.h include/
cp ./cairo-version.h include/

至此,cairo 的编译已经完成。