在 Windows 32 位上构建 Skia

Posted

技术标签:

【中文标题】在 Windows 32 位上构建 Skia【英文标题】:Building Skia on Windows 32 bit 【发布时间】:2017-02-16 16:07:04 【问题描述】:

我正在遵循this link 在 Windows 上构建 Skia。

对于 Windows x64,构建非常顺利。但不适用于 32 位。

1) 我尝试指定 target_cpu = "x86" 而不是 target_cpu = "x64",gn gen 工作正常,但 ninja 抛出错误,抱怨 Visual Studio 的路径包含空格。它有各种类似于以下的错误:

“C:\Programs”不是有效路径。

2) 我尝试生成 sln 文件并从 IDE 中构建(这是链接中提到的替代方法)。但是,我什至无法让 x64 版本以这种方式编译(许多来自 ninja 的非零退出代码,没有观察到更多消息)。

3) 我尝试使用该网站声称是“支持 32 位构建的唯一方法”的工具链。工具链将使用以下命令下载(在skia dir中执行):

python infra/bots/assets/win_toolchain/download.py -t C:/toolchain

我设法解决了许多错综复杂的问题(gutil 冲突、.py 扩展名遗漏、路径变量、谷歌云服务),但我现在陷入了困境:

以 xxxxxxxxxxxxxxxx 登录

AccessDeniedException: 403 Caller does not have storage.objects.list access to bucket skia-buildbots.

我不限于它的构建方式,只要它为我生成“库”即可。但是对于一个有这么多外部依赖项的大型项目,我认为我自己的方式并不容易。

【问题讨论】:

【参考方案1】:

我找到的一个解决方案:

    打开 out\Release\toolchain.ninja 文本文件(或特定于您的配置的 toolchain.ninja

    删除以下字符串(您可以在文本编辑器中使用带有空字符串的“替换文本”):

    C:/Program Files (x86)/Microsoft Visual Studio 14.0/win_sdk/bin/SetEnv.cmd /x86 && C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64_x86/
    

    来自任何地方(如果您使用过x86x64 的字符串可能会有所不同)

    照常使用ninja -C out/Release dm

通过这种方式,我们使用了一个工具链,其中cl.exeml.exelink.exe 命令被直接调用(可从PATH 环境访问)

【讨论】:

我也有几乎类似的问题,也许你也会帮助我。我设法构建了skia all.sln,它包括64个项目,我可以运行它们,但我不能自己创建一个项目,我尝试了很多技巧。如果我从解决方案中删除其他项目,忍者拒绝构建。根据您的建议,我应该从 toolchain.ninja 中删除一个字符串,但我什至没有这个字符串。我希望你知道一些魔法/ @bobra 这是一个不同的问题,将您自己的程序与 Skia 链接是一个完全不同的世界;看起来在这个最新版本中,它们仅使用一个库 (libskia.a) 来简化链接,因此您应该为您的项目做两件事:1) 为 .h 文件包含 skia/include/ 目录,以及 2) 链接您的程序与out/Release/libskia.lib)【参考方案2】:

另一个基于@dacap 的解决方案。但我改为编辑 gn 配置。

更改文件gn/toolchain/BUILD.gn

...   
  if (msvc == 2015) 
    bin = "$win_vc/bin/amd64"
   else 
    bin = "$win_vc/Tools/MSVC/$win_toolchain_version/bin/HostX64/$target_cpu"
  

  env_setup = ""
  if (target_cpu == "x86") 
    # Toolchain asset includes a script that configures for x86 building.
    # We don't support x86 builds with local MSVC installations.
    env_setup = "cmd /c $win_sdk/bin/SetEnv.cmd /x86 && "
  

...

...
if (msvc == 2015) 
  if (target_cpu == "x86") 
    bin = "$win_vc/bin"
   else 
    bin = "$win_vc/bin/amd64"
  
 else 
  bin = "$win_vc/Tools/MSVC/$win_toolchain_version/bin/HostX64/$target_cpu"


env_setup = ""

#if (target_cpu == "x86") 
#  # Toolchain asset includes a script that configures for x86 building.
#  # We don't support x86 builds with local MSVC installations.
#  env_setup = "cmd /c $win_sdk/bin/SetEnv.cmd /x86 && "
#
.....

【讨论】:

我刚发现还是有问题。当我运行长凳和测试时抛出异常。链接到groups.google.com/d/msg/skia-discuss/E8TBjJva_d8/1tzts3TkBAAJ【参考方案3】:

似乎(从 skia m67 开始)@WinCloud 的修复已部分合并到上游(但仍然必须删除 env_setup 部分)。

但是,如 cmets 中所述 - 它会在 OpenGL 初始化期间崩溃。 我已经修复了所有这些问题(至少到了可以运行演示应用程序的程度),作为一些额外的 - 修复了 .lib 与 Visual Studio 的调试配置的兼容性。

包括使用 Clang 构建“无系统库”配置的 .bat 文件(因为自述文件明确指出 VC++ 构建可能存在性能问题)。要使用这些,只需从 https://releases.llvm.org/download.html 下载最新的 LLVM 并将其安装到默认位置(使用 6.0.0 测试)。

如果您需要 DLL 运行时链接,您必须编辑 gn/BUILD.gn 文件 - 默认添加 /MD 标志并将 /MTd 更改为 /MDd 以进行调试。

这里是基于 chrome/m67 分支的补丁:

https://gist.github.com/Alexx999/39eae9182eecaa3dc06e73fdb3a1e7d9

【讨论】:

以上是关于在 Windows 32 位上构建 Skia的主要内容,如果未能解决你的问题,请参考以下文章

无法在Windows 7 32位上安装tensorflow

在带有 SP1 的 Windows 7 32 位上安装 Python 3.8

在 Windows XP 32 位上运行的最新版本的 Python 3 和 PyQt5

我无法在我的系统 windows 7 32 位上的 XAMPP 上启动 Apache

有没有办法让 Windows 64 位上的应用程序在 64 位和 32 位仿真层下执行代码?

如何在 Windows 10 64 位上安装 pygraphviz