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

如何在bazel run期间使系统DLL可用?MinGW环境问题求助

解决Bazel在Windows MinGW环境下bazel run的DLL缺失问题

针对你遇到的0xc0000139错误(DLL缺失/损坏),以下是几个实用的解决方案,可逐一尝试:

1. 确认bazel run执行环境的PATH是否正确

首先排查Bazel运行时的PATH是否真的包含C:\tools\msys64\mingw64\bin。执行以下命令直接打印运行环境的PATH:

bazel run --compiler=mingw-gcc -- cmd /c echo %PATH%

如果输出中没有目标路径,说明Bazel没有继承你设置的系统PATH,需要显式传递:

# 方法1:先设置PATH再执行bazel run
set "PATH=C:\tools\msys64\mingw64\bin;%PATH%" && bazel run --compiler=mingw-gcc //:test_my_lib

# 方法2:用Bazel的--action_env参数传递PATH
bazel run --compiler=mingw-gcc --action_env=PATH="C:\tools\msys64\mingw64\bin;%PATH%" //:test_my_lib

2. 将DLL复制到Bazel运行目录

Bazel默认从bazel-bin下的目标目录执行程序,直接将所需DLL复制到该目录即可绕过PATH依赖。在BUILD文件中操作:

第一步:定义DLL文件组

filegroup(
    name = "mingw_required_dlls",
    srcs = [
        "C:/tools/msys64/mingw64/bin/gtest.dll",
        "C:/tools/msys64/mingw64/bin/libstdc++-6.dll",
        "C:/tools/msys64/mingw64/bin/libgcc_s_seh-1.dll",
    ],
    visibility = ["//visibility:public"],
)

第二步:在测试目标中添加data依赖

cc_test(
    name = "test_my_lib",
    srcs = ["test_my_lib.cc"],
    deps = [":my_lib", "@com_google_googletest//:gtest_main"],
    # 将DLL文件组加入data,Bazel会自动复制到运行目录
    data = [":mingw_required_dlls"],
    compiler = "mingw-gcc",
)

3. 修正MinGW工具链配置,避免路径冲突

CI环境中存在两个MinGW实例,需确保Bazel使用的是C:\tools\msys64\mingw64下的版本:

  • 在项目根目录的.bazelrc中添加工具链配置:
build:mingw --crosstool_top=@mingw_toolchain//:toolchain
build:mingw --host_crosstool_top=@mingw_toolchain//:toolchain
  • 确保你的MinGW工具链定义(如@mingw_toolchain//:toolchain)中,path字段明确指向C:/tools/msys64/mingw64,避免误用到Git附带的MinGW版本。

4. 正确使用cc_import(针对第三方DLL)

如果用cc_import引入DLL,需同时在deps和data中声明,确保链接和运行阶段都能访问:

cc_import(
    name = "gtest_dll",
    # 链接用的静态库
    interface_library = "C:/tools/msys64/mingw64/lib/libgtest.dll.a",
    # 运行时需要的DLL
    shared_library = "C:/tools/msys64/mingw64/bin/gtest.dll",
)

cc_test(
    name = "test_my_lib",
    ...
    deps = [":my_lib", ":gtest_dll", "@com_google_googletest//:gtest_main"],
    data = [":gtest_dll"],
)

以上方案中,方案2(复制DLL到运行目录)最稳定,无需依赖环境变量;如果PATH配置是核心问题,方案1可快速验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:17:38