Skia-for-Aseprite 库:如何为 Visual Studio 中的 DEBUG 构建项目进行编译?

Skia-for-Aseprite libs: how to compile for a DEBUG-build project in Visual Studio?

我正在从 github 构建静态 C++ 库。具体来说,Skia-for-Aseprite 库(link 指向 git 中心页面)。我正在按照 git 存储库的自述文件中编写的 windows 编译说明进行操作。这些说明让您使用 LLVM/CLANG 和 Ninja 构建系统编译库。之后,在 2020 年 link 加入一个项目(我的主要 IDE)时,它们工作得很好。

问题是说明只说了如何编译 RELEASE-build 库,而我需要编译 DEBUG-build 库,这样我才能在 VS2020 中使用调试器。所以我更改了最终命令以尝试编译 DEBUG-build。我将它们更改为:

gn gen out/Release-x64 --args="is_debug=false is_official_build=true skia_use_system_expat=false skia_use_system_icu=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false skia_use_sfntly=false skia_use_freetype=true skia_use_harfbuzz=true skia_pdf_subset_harfbuzz=true skia_use_system_freetype2=false skia_use_system_harfbuzz=false target_cpu=""x64"" cc=""clang"" cxx=""clang++"" clang_win=""c:\deps\llvm"" win_vc=""C:\Program Files (x86)\Microsoft Visual Studio19\Community\VC"" extra_cflags=[""-MT""]"
ninja -C out/Release-x64 skia modules

至:

gn gen out/Debug-x64 --args="is_debug=true is_official_build=false skia_use_system_expat=false skia_use_system_icu=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false skia_use_sfntly=false skia_use_freetype=true skia_use_harfbuzz=true skia_pdf_subset_harfbuzz=true skia_use_system_freetype2=false skia_use_system_harfbuzz=false target_cpu=""x64"" cc=""clang"" cxx=""clang++"" clang_win=""c:\dev\llvm"" win_vc=""C:\Program Files (x86)\Microsoft Visual Studio19\Community\VC"" extra_cflags=[""-MT""]"
ninja -C out/Debug-x64 skia modules

所做的更改是:

构建良好,lib 文件明显更大,表明它们包含调试信息。但是,当在 VS2020 中将它们静态 link 整合到 DEBUG 构建项目中时,我会收到很多这样的错误:

LNK2038 - mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease'

当我 link 将 DEBUG-build 库放入 VS 中的 RELEASE-build 项目时,它可以正确构建和运行,这表明 VS2020 将 DEBUG-build 库视为 RELEASE-build 库,尽管上面列出的更改。

有没有人知道构建这些库需要什么,以便它们在 VS2020 中的 DEBUG 构建项目中工作?

感谢您提供的任何帮助。

我找到了解决办法!显然这个解决方案适用于 any LLVM DEBUG-built library Visual studio.

我的问题中触发编译的行(以“gn gen”开头)结束于:

extra_cflags=[""-MT""]"

要在visual studio中将编译后的库识别为调试模式,需要将“-MT”更改为“-MTd”。

问题中列出的其他更改很可能也是必要的。最值得注意的是:

  • "is_debug=false" 到 "is_debug=true"
  • "is_official_build=true" 到 "is_official_build=false"