我如何建造Cairo / Harfbuzz?

时间:2017-01-20 15:32:17

标签: mingw cairo fontconfig harfbuzz

Cairo依赖于FontConfig。 FontConfig依赖于Freetype。我已经构建了FreeType,但是当我尝试构建FontConfig时,由于FreeType需要HarfBuzz,我会收到链接错误。

当我尝试构建Harfbuzz时,它依赖于FreeType。因此,我们有一个循环依赖。此时的makefile被破坏:当它试图构建测试时,它们无法链接,因为它们需要来自Harbuzz本身的符号。这可以通过在链接线中使用HarfBuzz两次来解决。或者通过删除我所做的所有测试。所以这解决了这个问题。

Harfbuzz有一个名为“helper-cairo.cc”的文件。当我尝试编译它时,它抱怨一个mising的FontConfig头文件,所以显然存在对FontConfig的依赖。但是,如果没有首先构建HarfBuzz,我就无法构建FontConfig!

我不知道如何解决这种依赖。也许我可以在构建HarfBuzz时禁用Cairo助手,使用结果库来构建FontConfig,然后使用生成的FontConfig重建HarfBuzz然后重建FontConfig?这一切似乎都很麻烦。

我正在使用MinGW构建,Windows DLL不喜欢未解析的符号,所以我认为我不能用共享库解决这个问题。我不确定为什么在链接FontConfig时我需要HarfBuzz - 也许它正在尝试构建DLL:(

如何在不丢失重要功能的情况下解决这个问题?

2 个答案:

答案 0 :(得分:2)

freetype和HarfBuzz之间也存在循环依赖关系。

请注意,只有使用HarfBuzz构建的测试和工具才需要fontconfig和Cario,因此配置它们似乎是安全的:

1)使用以下方法构建Freetype:

./configure --prefix=${PREFIX} --host=x86_64-w64-mingw32 --with-sysroot=/usr/x86_64-w64-mingw32 --with-harfbuzz=no

2)使用以下方式构建HarfBuzz:

./configure --prefix=${PREFIX} --host=x86_64-w64-mingw32 --with-fontconfig=no --with-cairo=no --with-sysroot=/usr/x86_64-w64-mingw32

3)使用以下方法构建Freetype:

./configure --prefix=${PREFIX} --host=x86_64-w64-mingw32 --with-sysroot=/usr/x86_64-w64-mingw32 --with-harfbuzz=yes

4)构建fontconfig。

5)建造开罗。

尚未完全测试,但应该有效。

答案 1 :(得分:0)

我最近进入了harfbuzz场景。我已经编写并收集了一些基本的harfbuzz示例。脚本依赖于freetype2,harfbuzz和cairo。 这是link。 要运行它们,只需键入python3 filename.py

即可