Bazel 的 Mingw-w64 工具链 (Ubuntu 20.04.1 )

2024-01-02

我正在尝试使用 Bazel 在 Ubuntu 上为 mingw-w64 创建工具链。我正在关注这个教程:https://docs.bazel.build/versions/master/tutorial/cc-toolchain-config.html https://docs.bazel.build/versions/master/tutorial/cc-toolchain-config.html。但是,当我尝试将编译器的路径调整为 mingw64 安装的路径时,出现以下错误:

bazel build --config=mingw_config -s //main:hello-world --verbose_failures
Starting local Bazel server and connecting to it...
INFO: Analyzed target //main:hello-world (16 packages loaded, 46 targets configured).
INFO: Found 1 target...
SUBCOMMAND: # //main:hello-world [action 'Compiling main/hello-world.cc', configuration: a79594d39f0782b210e102e89b8a67dda26e295f95805aa9c0140f6281fdd3f5, execution platform: @local_config_platform//:host]
(cd /home/federica/.cache/bazel/_bazel_federica/fb36143429cca4c38e61a5e83150e333/execroot/__main__ && \
  exec env - \
    PATH=/home/federica/.cache/bazelisk/downloads/bazelbuild/bazel-3.5.0-linux-x86_64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin \
    PWD=/proc/self/cwd \
  /usr/bin/x86_64-w64-mingw32-gcc -MD -MF bazel-out/k8-fastbuild/bin/main/_objs/hello-world/hello-world.d '-frandom-seed=bazel-out/k8-fastbuild/bin/main/_objs/hello-world/hello-world.o' -iquote . -iquote bazel-out/k8-fastbuild/bin -iquote external/bazel_tools -iquote bazel-out/k8-fastbuild/bin/external/bazel_tools -c main/hello-world.cc -o bazel-out/k8-fastbuild/bin/main/_objs/hello-world/hello-world.o)
SUBCOMMAND: # //main:hello-world [action 'Linking main/hello-world', configuration: a79594d39f0782b210e102e89b8a67dda26e295f95805aa9c0140f6281fdd3f5, execution platform: @local_config_platform//:host]
(cd /home/federica/.cache/bazel/_bazel_federica/fb36143429cca4c38e61a5e83150e333/execroot/__main__ && \
  exec env - \
    PATH=/home/federica/.cache/bazelisk/downloads/bazelbuild/bazel-3.5.0-linux-x86_64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin \
    PWD=/proc/self/cwd \
  /usr/bin/x86_64-w64-mingw32-gcc -o bazel-out/k8-fastbuild/bin/main/hello-world bazel-out/k8-fastbuild/bin/main/_objs/hello-world/hello-world.o -Wl,-S -lstdc++)
ERROR: /home/federica/examples/cpp_mingw_toolchain/stage1/main/BUILD:3:10: output 'main/hello-world' was not created
ERROR: /home/federica/examples/cpp_mingw_toolchain/stage1/main/BUILD:3:10: not all outputs were created or valid
Target //main:hello-world failed to build
INFO: Elapsed time: 9.390s, Critical Path: 0.58s
INFO: 2 processes: 2 linux-sandbox.
FAILED: Build did NOT complete successfully

如果我往里面看bazel-out/k8-fastbuild/bin/main/hello-world未创建可执行文件。 但是,如果我尝试在 bash 中运行 verbose_failures 指示的单个命令:

cd /home/federica/.cache/bazel/_bazel_federica/fb36143429cca4c38e61a5e83150e333/execroot/__main__ && \
  exec env - \
    PATH=/home/federica/.cache/bazelisk/downloads/bazelbuild/bazel-3.5.0-linux-x86_64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin \
    PWD=/proc/self/cwd \
  /usr/bin/x86_64-w64-mingw32-gcc -o bazel-out/k8-fastbuild/bin/main/hello-world bazel-out/k8-fastbuild/bin/main/_objs/hello-world/hello-world.o -Wl,-S -lstdc++

可执行文件“Hello-world.exe”已成功创建。

关于出了什么问题有什么建议吗?

下面是我的工具链构建文件

package(default_visibility = ["//visibility:public"])

cc_toolchain_suite(
    name = "mingw_suite",
    toolchains = {
        "k8": ":k8_toolchain",
    },
)



filegroup(name = "empty")

cc_toolchain(
    name = "k8_toolchain",
    toolchain_identifier = "k8-toolchain",
    toolchain_config = ":k8_toolchain_config",
    all_files = ":empty",
    compiler_files = ":empty",
    dwp_files = ":empty",
    linker_files = ":empty",
    objcopy_files = ":empty",
    strip_files = ":empty",
    supports_param_files = 0,
)

load(":cc_toolchain_config.bzl", "cc_toolchain_config")
cc_toolchain_config(name = "k8_toolchain_config")

和 cc_toolchain_config.bzl:

load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
   # NEW
load(
    "@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
    "feature",
    "flag_group",
    "flag_set",
    "tool_path",
)

all_link_actions = [ # NEW
    ACTION_NAMES.cpp_link_executable,
    ACTION_NAMES.cpp_link_dynamic_library,
    ACTION_NAMES.cpp_link_nodeps_dynamic_library,
]


def _impl(ctx):
    tool_paths = [ # NEW
        tool_path(
            name = "gcc",
            path = "/usr/bin/x86_64-w64-mingw32-gcc",
        ),
        tool_path(
            name = "ld",
            path = "/usr/bin/x86_64-w64-mingw32-ld",
        ),
        tool_path(
            name = "ar",
            path = "/usr/bin/x86_64-w64-mingw32-ld",
        ),
        tool_path(
            name = "cpp",
            path = "/bin/false",
        ),
        tool_path(
            name = "gcov",
            path = "/bin/false",
        ),
        tool_path(
            name = "nm",
            path = "/bin/false",
        ),
        tool_path(
            name = "objdump",
            path = "/bin/false",
        ),
        tool_path(
            name = "strip",
            path = "/bin/false",
        ),
    ]
    
    
    
    features = [ # NEW
        feature(
            name = "default_linker_flags",
            enabled = True,
            flag_sets = [
                flag_set(
                    actions = all_link_actions,
                    flag_groups = ([
                        flag_group(
                            flags = [
                                "-lstdc++",
                            ],
                        ),
                    ]),
                ),
            ],
        ),
    ]
    return cc_common.create_cc_toolchain_config_info(
        ctx = ctx,
        features = features, # NEW
        cxx_builtin_include_directories = [ # NEW
        "/usr/x86_64-w64-mingw32/include",
        "/usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/include/c++",
        "/usr/share/mingw-w64/include",
        "/usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/include",
        "/usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/include-fixed",
        "/usr/include",
        ],        
        toolchain_identifier = "k8-toolchain",
        host_system_name = "local",
        target_system_name = "local",
        target_cpu = "k8",
        target_libc = "unknown",
        compiler = "i686-w64-mingw32-gcc",
        abi_version = "unknown",
        abi_libc_version = "unknown",
        tool_paths = tool_paths,
    )

cc_toolchain_config = rule(
    implementation = _impl,
    attrs = {},
    provides = [CcToolchainConfigInfo],
)


非常感谢您的帮助!


这个问题相对容易被忽略,但实际上已经包含在你的问题中,错误说hello-world尚未创建,同时hello-world.exe显然制作得很好。也就是说,我们实际上已经构建了一个文件.exe后缀,但没有告诉bazel通过它的工具链配置就是这种情况,如果没有它,它就无法期待输出。

为了解决这个问题,您还可以加载:artifact_name_pattern from @bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl与其他符号,然后设置artifact_name_patterns的属性cc_common.create_cc_toolchain_config_info():

artifact_name_patterns = [
    artifact_name_pattern(
        category_name = "executable",
        prefix = "",
        extension = ".exe",
    ),
]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bazel 的 Mingw-w64 工具链 (Ubuntu 20.04.1 ) 的相关文章

  • 成员字段、构建顺序

    在 C 中 当执行如下所示的操作时 构造顺序是否得到保证 Logger Logger kFilePath logs runtime log logFile kFilePath 是的 施工顺序始终得到保证 但是 不能保证它与对象在初始值设定项
  • C# 中直接从 URL 获取图像尺寸

    我正在尝试使用以下代码直接从网络上获取图片的尺寸 string image http www hephaestusproject com csharp3 png byte imageData new WebClient DownloadDa
  • 显示 div 内的用户名列表

    我是 jQuery 新手 在我的项目中 我创建了一个类User其中代码如下所示 static ConcurrentDictionary
  • C++0x 初始值设定项列表示例

    我想看看这个现有代码示例如何利用 C 0x 初始化列表功能 示例0 include
  • 是否有可能将 *.pdb 文件包含到发布版本中以查看错误行号?

    我做了一个项目 所有设置都是默认的 当我在调试模式 构建配置 调试 下运行它并遇到异常时 它转储到我的自定义日志记录机制 其中包含错误行号 但是当我运行发布构建时 记录相同的异常 没有行号 只有方法抛出和记录调用堆栈 是否有可能在发布配置
  • 如何检查号码是否只有唯一的数字?

    例如 2345 是唯一的数字 因为没有数字显示两次 但 3324 不是唯一的数字 因为 3 出现了两次 我尝试使用 但我 代码 显示但我没有得到数字我得到了数字 编辑 你不能使用字符串 number 10 number 100 number
  • C语言中没有循环可以打印数组吗?

    例如 在Python中 如果我们将一个列表作为数组 它会直接用一行代码打印整个数组 有什么办法可以用C语言实现同样的事情吗 简短回答 No 对表格上几乎所有问题的简短回答 用 C 语言做 X 工作能像用 Python 一样简单吗 No 长答
  • PartialView Action 正在调用自身

    我有 MVC 应用程序 它用于从主视图 ProductMaster 将 ProductAreaGrid 列表显示为 PartialView 并且它将在局部视图内将 CreateProductArea 作为 PartialView 我的 Gr
  • 从 Golang 调用 C 函数

    我想在 Golang 中编写控制器逻辑并处理 json 和数据库 同时在 C 中使用我的数学处理模型 在我看来 调用 C 函数的开销必须尽可能低 就像设置寄存器 rcx rdx rsi rdi 一样 执行一些操作fastcall 并获取 r
  • 原子的 C++ 内存屏障

    在这方面我是个新手 谁能提供以下内存屏障之间差异的简化解释 窗户MemoryBarrier 围栏 mm mfence 内联汇编asm volatile memory 内在的 ReadWriteBarrier 如果没有简单的解释 一些好文章或
  • 重定向 std::cout

    我需要一个类 在其对象的生命周期内将一个 ostream 重定向到另一个 ostream 经过一番修补后 我想出了这个 include
  • 这些工作队列标志意味着什么?

    在研究工作队列时 我遇到了内核中定义的工作队列标志和常量 我有以下我无法理解的疑问 这里的排水和救援到底是什么意思 WQ DRAINING 1 lt lt 6 internal workqueue is draining WQ RESCUE
  • 使用联合对 IP 地址进行多种解释?

    在工作中 我们使用以下构造来将 IP 地址解释为 4 字节数组或 32 位整数 union IPv4 std uint32 t ip std uint8 t data 4 这很好用 但是读完这本书的第 97 章 不要使用联合来重新解释表示
  • 文本框中“结束编辑”的事件

    我正在 winform c 中使用文本框 并使用文本在数据库中进行查询 但每次文本更改时 我都需要不断查阅文本框的文本 因此 对于这些 我使用 KeyUp 但这个活动太慢了 文本框编辑完成后是否会触发任何事件 我考虑完成2个条件 控制失去焦
  • 如何在 SQLite 中检查数据库是否存在 C#

    我目前正在用 C 编写一个应用程序 并使用 sqlite 作为嵌入式数据库 我的应用程序在启动时创建一个新数据库 但如何让它检查数据库是否存在 如果它确实存在 我如何让它使用它 如果不存在如何创建一个新数据库 这是我到目前为止所拥有的 pr
  • C# 模式匹配

    我对 C 有点陌生 我正在寻找一个字符串匹配模式来执行以下操作 我有一个像这样的字符串 该书将在 唐宁街 11 号接待处 并将由主要医疗保健人员参加 我需要创建一个 span 标签来使用 startIndex 和 length 突出显示一些
  • 包含从代码隐藏 (ASP.NET C#) 到 ASPX 中的图像概述的图像列表 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何获取运行或段落的高度

    我找到了Run or Paragraph in FlowDocument现在我需要知道HEIGHT of it i e while navigator CompareTo flowDocViewer Document ContentEnd
  • 是否可以检测流是否已被客户端关闭?

    简要介绍一下情况 我有一项服务可以通过套接字接收信息并发送回复 连接不安全 我想设置另一个可以为这些连接提供 TLS 的服务 这个新服务将提供单个端口并根据提供的客户端证书分发连接 我不想使用 stunnel 有几个原因 其中之一是每个接收
  • 如何创建实体集或模型而不在数据库中创建相应的表 - 实体框架

    我的 sqlserver 数据库中有一个存储过程 它返回多个结果集 我正在使用 msdn 中的以下链接从实体框架中的 SP 读取多个结果集 https msdn microsoft com en us library jj691402 v

随机推荐

  • “阻塞系统调用”是什么意思?

    阻塞系统调用 是什么意思 在我的操作系统课程中 我们正在学习多线程编程 当我在教科书中读到 当一个线程进行阻塞系统调用时 它可以允许另一个线程运行 时 我不确定这是什么意思 阻塞系统调用是必须等待操作完成的调用 read 将是一个很好的例子
  • 在 Java 中处理多个构造函数的最佳方法

    我一直想知道在 Java 中处理多个构造函数的最佳 即最干净 最安全 最有效 方法是什么 特别是当在一个或多个构造函数中未指定所有字段时 public class Book private String title private Stri
  • 弱链接的实际应用有哪些?

    使用特殊的编译器命令可以声明符号weak 根据维基百科 https en wikipedia org wiki Weak symbol 弱符号是目标文件或动态库中的符号定义 可能会被其他符号定义覆盖 什么场景或者什么应用需要弱符号 什么是典
  • 是否可以在 SASS mixin 中测试当前元素类型?

    我有一个 mixin 可以绘制这样的按钮 mixin button border 1px solid orange background orange padding 0 height 27px text transform upperca
  • Angular 2:让组件自动检测服务中的变量变化

    我目前面临的问题是 从功能上讲 当用户登录时 我的导航栏不会自动更新以向他们显示正确的链接 仅当我手动刷新不需要的页面时 它才会更新 因为这是单页面应用程序 我可以正常处理注销 因为注销按钮和功能位于控制导航栏的组件内 但是 登录是通过身份
  • C++ 中 _tmain() 和 main() 有什么区别?

    如果我使用以下 main 方法运行我的 C 应用程序 则一切正常 int main int argc char argv cout lt lt There are lt lt argc lt lt arguments lt lt endl
  • 分而治之——为什么它有效?

    我知道像归并排序和快速排序这样的算法使用分而治之的范式 但我想知道为什么它可以降低时间复杂度 为什么 分而治之 算法通常比非分而治之算法效果更好 分而治之的算法工作得更快 因为它们最终完成的工作更少 考虑二分搜索的经典分而治之算法 而不是看
  • 不需要播种 java.security.SecureRandom 吗?

    我使用的是 Java 1 7 如下面的代码所示 在 Ubuntu 中使用 Oracle 的 Java 7 编译器编译 java security SecureRandom似乎是不必要的 因为代码为两个伪随机序列的起始值生成两个不同的 Big
  • 我可以使用 Spring Data JPA 为 MappedSuperClass 的所有子级使用通用存储库吗?

    给定以下类结构 MappedSuperclass Inheritance strategy InheritanceType TABLE PER CLASS public abstract class Animal Entity public
  • Python 中正整数所需的最小位长度

    1 0b1 gt 1 5 0b101 gt 3 10 0b1010 gt 4 100 0b1100100 gt 7 1000 0b1111101000 gt 10 如何获取整数的位长度 即在 Python 中表示正整数所需的位数 在 pyt
  • 如何在python中转储不带引号的json

    这是我转储文件的方法 with open es hosts json w as fp json dump join host list keys fp 结果是 a b c 我想 a b c Thanks 在进行字符串替换之前 您可能需要st
  • 将 Pentaho Reporting Web 前端与自定义 Java/JSF 应用程序集成

    我有以下情况 带有数据的 OTLP 数据库架构 数据库过程将数据泵送到具有定义的维度和事实表的非规范化星型模式中 目标是构建 Web 应用程序 它可以对那些定义的数据结构进行汇总和深入分析 我可以构建自定义 Web 界面 但我更喜欢使用现有
  • 逻辑应用程序读取存储在变量中的json属性

    我在逻辑应用程序变量中有这个 json 我想要这个 JSON 的 id 属性并进一步使用 如何获取这个id属性值 我的 JSON 是 id 1 name John bright username Lily email email prote
  • 如何在ajax响应返回的脚本标签内执行javascript

    我正在发送一个 jquery get 请求 如下所示 get this attr href this serialize null script 我期望收到的响应将包含在脚本标签中 我知道浏览器不会执行响应 除非它返回时没有脚本标记 通常我
  • 元素 中“Project”属性的值“”无效。 vs2012

    我在尝试在 Visual Studio 2012 中加载某些项目时收到以下错误 G path project csproj error The value of the Project attribute in element
  • 如何在 VS Code 上设置 AngularDart5

    我已经广泛搜索了有关如何在 Visual Studio Code 上有效设置 Angular Dart 5 的文档 但到目前为止没有发现任何结论 我已经搜索过的地方 Youtube 堆栈溢出 https webdev dartlang or
  • Maven 与查询 DSL 集成

    我正在尝试将 Maven 中的现有项目与查询 dsl 集成 我添加了如下依赖项
  • .Net Core 中的 PagedList.Core.Mvc PagedListPager Html 扩展不存在

    似乎是PagedList Core不包含 Html helper 的扩展方法 所以我无法使用下面的代码 Html PagedListPager Model page gt Url Action Index new page PagedLis
  • 加载实体时的 nhibernate 竞争条件

    我的网络应用程序中存在休眠竞争条件问题 我知道在使用旧版本的 log4net 时会发生这种情况 应该在 1 2 10 中修复 尽管我也经历过这种情况 因此 我们暂时禁用了 log4net 因为竞争条件会导致 IIS 崩溃 并且在生产中发生这
  • Bazel 的 Mingw-w64 工具链 (Ubuntu 20.04.1 )

    我正在尝试使用 Bazel 在 Ubuntu 上为 mingw w64 创建工具链 我正在关注这个教程 https docs bazel build versions master tutorial cc toolchain config