我该如何构建Cairo/Harfbuzz?

5
开罗依赖于FontConfig,而FontConfig又依赖于Freetype。我已经构建了FreeType,但在尝试构建FontConfig时,由于FreeType需要HarfBuzz,因此出现了链接错误。
当我尝试构建Harfbuzz时,它又依赖于FreeType。因此我们有了循环依赖。此时的makefiles是不可用的:当它尝试构建测试时,它们无法链接,因为它们需要来自Harbuzz本身的符号。这可以通过在链接行中两次使用HarfBuzz来解决。或者删除所有测试(这就是我所做的)。因此问题得到了解决。
Harfbuzz有一个名为“helper-cairo.cc”的文件。当我尝试编译它时,它抱怨缺少FontConfig头文件,因此显然存在对FontConfig的依赖。但是,我不能在构建HarfBuzz之前构建FontConfig!
我不知道如何解决这个依赖关系。也许我可以在构建HarfBuzz时禁用Cairo助手,使用生成的库来构建FontConfig,然后使用生成的FontConfig重新构建HarfBuzz,最后再重建FontConfig?这似乎很麻烦。
我正在使用MinGW进行构建,而Windows DLL不喜欢未解析的符号,因此我认为我无法通过共享库解决这个问题。我真的不确定为什么在链接FontConfig时需要HarfBuzz - 也许它正在尝试构建DLL :(
有什么想法可以解决这个问题,而不会失去重要的功能吗?
2个回答

5

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

请注意,fontconfig和Cairo仅用于使用HarfBuzz构建的测试和工具,并且因此似乎可以安全地将它们配置为不使用:

  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. 构建Cairo。

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


0
我最近涉足了Harfbuzz场景。我编写并收集了一些基本的Harfbuzz示例脚本,这些脚本依赖于freetype2、harfbuzz和cairo。 这里是链接。 要运行它们,只需键入python3文件名.py即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接