【问题标题】:How to compile Freetype (2) and Harfbuzz (with visual studio) to make them work together?如何编译 Freetype (2) 和 Harfbuzz (with visual studio) 让它们一起工作?
【发布时间】:2018-04-18 09:47:15
【问题描述】:

我找到了关于编译与 Harfbuzz 相关的 Freetype 的已知问题的良好文档:http://www.gregwessels.com/dev/2017/05/02/freetype-harfbuzz.html 和这里44184890

但现在它们似乎已经过时了:freetype-2.9 和 harfbuzz-1.7.6

这是我的编译方式:

  • 下载Freetype tarball
  • 解压压缩包...
  • 打开 builds\windows\vc2010\freetype.sln
  • 它应该已经很好地生成(作为 dll)
  • 下载Harfbuzz
  • 解压 freetype 旁边的压缩包...
  • 在根级别运行cmake ./ 以获得.sln
  • 它必须已经很好地生成(作为 lib)

此时您有 2 个独立的库不能一起工作,这意味着:

Freetype 不会打开您字体的 GSUB 脚本。(或者我错了)

为此,我需要帮助!我也需要确认!!!

似乎需要在编译时在 Freetype 中启用 Harfbuzz;我找到了一个名为 FT_CONFIG_OPTION_USE_HARFBUZZ

的预编译器指令

但是在激活它时,在第三个项目中同时使用这两个库时出现了一些编译链接错误:

autofit.obj : error LNK2019: external symbol not found _hb_ft_font_create referenced in function _af_face_globals_new

很高兴知道,hb_ft_font_create 是 harfbuzz 中的一个外部函数。

所以这似乎是一个循环外部问题......我当然没有好的配置,但我浏览了很多文档和帮助,什么也没找到......

-- 编辑-- 两个项目解压后,一般都可以得到这样一棵树:

.
├── freetype-2.9
│   ├── autogen.sh
│   ├── builds
│   │   ├── ...
│   │   └── windows
│   │       └── vc2010    <<<< The .sln to use is in here
│   ├── CMakeLists.txt    <<<< It is also good to obtain proper sln
│   ├── configure
│   ├── devel
│   │   ├── ft2build.h
│   │   └── ftoption.h
│   ├── include
│   │   ├── freetype
│   │   └── ft2build.h
│   ├── ...
│   ├── objs
│   │   ├── freetype.dll
│   │   ├── freetype.lib
│   │   ├── README
│   │   └── Win32
│   ├── README
│   ├── README.git
│   └── src
└── harfbuzz-1.7.6
    ├── ...
    ├── cmake_install.cmake
    ├── CMakeLists.txt   <<<< The cmake project to obtain proper sln is this one
    ├── compile
    ├── ...
    ├── COPYING
    ├── CTestTestfile.cmake
    ├── Debug
    │   ├── harfbuzz.lib
    │   ├── harfbuzz-subset.lib
    │   └── ...
    ├── depcomp
    ├── docs
    ├── gtk-doc.make
    ├── harfbuzz.sln
    ├── harfbuzz.vcxproj
    ├── ...
    ├── main.dir
    │   └── Debug
    ├── NEWS
    ├── README
    ├── README.python
    ├── RELEASING.md
    ├── replace-enum-strings.cmake
    ├── RUN_TESTS.vcxproj
    ├── RUN_TESTS.vcxproj.filters
    ├── src
    │   ├── *.hh
    │   └── *.cc
    ├── test
    ├── THANKS
    ├── TODO
    ├── util
    └── Win32
        └── Debug

【问题讨论】:

  • 请列出您所采取的步骤,您将其称为:extract and so on...
  • 在并排解压缩源代码后,我添加了一个缩短的树转储。我已经使用7zip这样做了,但我想它相当于经典的tar -xvf ...
  • 该解决方案似乎可以正常编译freetype(根本没有改变,照原样)但修改harfbuzz的CMakeFiles.txt(或CMakeCache已经构建)以激活链接freetype
  • 我能够得到我想要的:从 sln 或从 cmake 编译 freetype。并在 harfbuzz freetype 用法中激活(option(HB_HAVE_FREETYPE "Enable freetype interop helpers" ON) 行)。但我也使用 hack,添加 harfbuzz FREETYPE_INCLUDE_DIR_freetype2FREETYPE_INCLUDE_DIR_ft2buildFREETYPE_LIBRARY_DEBUGFREETYPE_LIBRARY_RELEASE Normaly,我不应该那样做......我如何配置 freetype 和/或 harfbuzz 以使用这个“图书馆”东西正常吗? Cmake 的概念非常混乱。

标签: c++ c visual-studio compiler-errors extern


【解决方案1】:

或者像--with-freetype=no --with-fontconfig=no这样配置harfbuzz来避免循环deps...反正我是这么认为的...

【讨论】:

    【解决方案2】:

    只需使用https://github.com/Microsoft/vcpkg/ 安装两者,不要回头 :) HarfBuzz 和 Freetype 都有一个端口并且得到很好的支持。

    关于循环依赖,FreeType 到 HarfBuzz 的依赖不是必须的。 vcpkg 处理 HarfBuzz 到 FreeType 的依赖关系,这是大多数项目需要的。

    【讨论】:

    • 谢谢,我正在阅读关于vcpkg... 看起来不错,但它是另一种微软独有的技术。我曾经梦想 harfbuzz 和 freetype(开放库),非常相关的项目提供了一些我想要的编译技术......遗憾的是,它没有很好的文档记录。 vcpkg 将是我现在的下一个选择。我总是尝试在我的第一个方法中提供完整的平台支持。
    • 我的依赖是从 HarfBuzz 到 FreeType,而不是其他方式。 (Harfbuzz 加载由 Freetype 准备的对象。)我放弃了我的第一个方法来拥有循环依赖(这对于某些项目来说也是可能的和需要的)。
    • 是的,正如我所说。甚至 Chrome 也没有对 HarfBuzz 的 FreeType 依赖,bugs.chromium.org/p/chromium/issues/detail?id=694137 就像刚才所说的使用 vcpkg :) 但是如果你不喜欢使用 vcpkg,请使用两个项目的 cmake 项目文件,这已经过时但曾经可以工作 @987654323 @
    • 这是不可行的。 Freetype 在构建时需要在 ftoption.h 中进行大量配置。
    猜你喜欢
    • 2019-02-04
    • 2013-08-07
    • 1970-01-01
    • 2022-08-14
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    相关资源
    最近更新 更多