You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下Bazel调用MSYS2时无法找到g++的求助

解决Bazel构建时无法找到MSYS2安装的g++问题

我通过Chocolatey在Windows系统上安装了Bazel,同时安装MSYS2以获取bash.exe环境。已通过MSYS2的pacman工具安装g并将其添加至系统PATH,在MSYS2 shell及原生Powershell中执行g++ --version均正常,但通过Bazel执行构建命令时,却出现g未找到的错误,具体报错如下:

C:/> bazel build //kernels:rasterize_triangles_kernel
INFO: Analyzed target //kernels:rasterize_triangles_kernel (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
ERROR: C://kernels/BUILD:20:8: Executing genrule //kernels:rasterize_triangles_kernel failed: (Exit 127): bash.exe failed: error executing command (from target //kernels:rasterize_triangles_kernel) C:\msys64\usr\bin\bash.exe -c ... (remaining 1 argument skipped)
/usr/bin/bash: line 1: g++: command not found
Target //kernels:rasterize_triangles_kernel failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 4.883s, Critical Path: 4.80s
INFO: 2 processes: 2 internal.
FAILED: Build did NOT complete successfully


可行的解决方法

  • 在genrule中显式指定PATH或g++绝对路径
    如果是自定义genrule,要么直接把命令里的g++替换为MSYS2中g++的绝对路径(比如C:/msys64/usr/bin/g++.exe),要么在cmd开头先添加MSYS2的bin目录到PATH:

    genrule(
        name = "rasterize_triangles_kernel",
        srcs = [...],
        outs = [...],
        cmd = "export PATH=/usr/bin:$PATH && g++ [你的编译参数]",
        tools = [...],
    )
    
  • 让Bazel继承当前环境的完整PATH
    Bazel默认会隔离构建环境,可能不会完全读取系统PATH。执行构建时可以用参数强制继承当前环境的PATH:

    bazel build //kernels:rasterize_triangles_kernel --action_env=PATH="$env:PATH"
    

    也可以在执行Bazel命令前,手动把MSYS2的bin目录放到PATH最前端,避免路径优先级问题:

    $env:PATH = "C:\msys64\usr\bin;" + $env:PATH
    bazel build //kernels:rasterize_triangles_kernel
    
  • 配置Bazel自定义C++工具链
    创建工具链配置文件指定MSYS2的编译器路径,比如新建toolchain.bzl:

    def _msys2_cc_toolchain_impl(ctx):
        toolchain = cc_common.create_cc_toolchain_config_info(
            ctx = ctx,
            toolchain_identifier = "msys2-gcc",
            host_system_name = "x64_windows",
            target_system_name = "x64_windows",
            target_cpu = "x86_64",
            compiler = "gcc",
            tool_paths = {
                "gcc": "C:/msys64/usr/bin/g++.exe",
                "g++": "C:/msys64/usr/bin/g++.exe",
                "ld": "C:/msys64/usr/bin/ld.exe",
                "ar": "C:/msys64/usr/bin/ar.exe",
            },
        )
        return [toolchain]
    
    msys2_cc_toolchain = rule(
        implementation = _msys2_cc_toolchain_impl,
        provides = [CcToolchainConfigInfo],
    )
    

    之后在WORKSPACE中注册该工具链,或构建时用--crosstool_top参数指定使用这个工具链。

内容的提问来源于stack exchange,提问作者Zoom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:15:28