【问题标题】:Bazel giving "open_proc" error 21 running embedded commandBazel 给出“open_proc”错误 21 运行嵌入式命令
【发布时间】:2020-07-01 01:40:07
【问题描述】:

我正在为 Haxe 创建一个 Bazel 扩展,虽然我在构建东西方面取得了一些初步成功,但我遇到了障碍,我不确定什么是正确的解决方法。

在 Haxe 中,如果您在 build.hxml 文件中声明对 Haxelib 的依赖关系,则在执行构建时,Haxe 编译器将从 Internet 获取该 Haxelib 并在本地安装它(如果您还没有它),使用一个名为“haxelib”的程序。似乎这个过程被 Bazel 沙箱阻止了,但我还没有找到很多关于沙箱如何工作的文档,如果这是预期的,以及是否有解决方法。我目前在 Windows 10 中工作;这是我得到的错误:

$ bazel build //:neko-lib --verbose_failures
INFO: Analyzed target //:neko-lib (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
ERROR: D:/repo/validation/BUILD:3:13: HaxeCompile neko/validation.n failed (Exit 1): haxe.exe failed: error executing command
  cd C:/users/user/_bazel_user/s6xipia4/execroot/__main__
  external/haxe_windows_amd64/haxe.exe bazel-out/x64_windows-fastbuild/bin/build.hxml
Execution platform: @local_config_platform//:host
Unix.Unix_error(21, "open_proc", "haxelib path hx3compat")
Target //:neko-lib failed to build
INFO: Elapsed time: 1.705s, Critical Path: 0.62s
INFO: 0 processes.
FAILED: Build did NOT complete successfully

hx3compat 是我要加载的 haxelib 的名称。错误 21 似乎是"is a directory",但我不确定实际抱怨的是什么。这是我正在使用的运行操作:

ctx.actions.run(
    outputs = [out],
    inputs = inputs,
    executable = haxe_cmd,
    arguments = [args],
    env = env,
    mnemonic = "HaxeCompile",
)

haxe_cmd 指向 haxe.exe 文件,而输入是:

  • bazel-out/x64_windows-fastbuild/bin/build.hxml(我正在构建的构建文件)
  • external/haxe_windows_amd64/haxe.exe
  • external/haxe_windows_amd64/haxelib.exe

关于我可以尝试解决此问题的任何想法?

更新:我今天写了一条规则,运行有问题的命令 (haxelib path hx3compat) 并且有效,所以我认为这是调用该命令的错误 - 而不是命令本身。

【问题讨论】:

    标签: bazel haxe


    【解决方案1】:

    我得到的特定错误 - Unix error 21 - 是由 Bazel 创建的 shell 没有 COMSPEC 环境变量引起的:有关更多详细信息,请参阅 herehere。通过--action_env=COMSPEC 命令行将该变量添加到环境中让我克服了那个错误。但是,由 Haxe 进程生成的命令 shell 无法处理符号链接,因此尝试访问 Bazel 引入的目录会遇到很多麻烦,所以我认为通过这条路线使用 haxe 最终会失败。只是为了记录,我能够让 haxelib 命令本身通过 haxe 进程运行,所以这个问题的答案是确保设置 COMSPEC 变量。

    【讨论】:

    • 该死!你试过Lixblogpostvid)吗?它由 HaxeLib 的前维护者提供,避免使用 HaxeLib,引入构建约定,并提供可重现的构建。
    • 我听说过 Lix,但实际上并没有尝试过。似乎它可能很合适;尽管使用 OOTB Haxe,我实际上已经取得了更大的成功——它仍然有点 hacky,但我可以编译。
    • 我一直在努力让在 Haxe 中编写 polygot 代码库变得更容易。与简单的 FFI 包装器 WRT 单元测试相比,Haxe 节省了时间,但如果构建系统处理容器,它将非常有帮助。在别处讨论? hi@indolering.com....
    猜你喜欢
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 2020-04-18
    • 2020-07-01
    • 2019-06-21
    相关资源
    最近更新 更多