用于Bazel的Mingw-w64工具链Ubuntu 20.04.1

如何解决用于Bazel的Mingw-w64工具链Ubuntu 20.04.1

我正在尝试使用Bazel在Ubuntu上为mingw-w64创建我的工具链。我正在学习本教程: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',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",tool_path(
            name = "cpp",path = "/bin/false",tool_path(
            name = "gcov",tool_path(
            name = "nm",tool_path(
            name = "objdump",tool_path(
            name = "strip",]
    
    
    
    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",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中的@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl和其他符号,然后将artifact_name_patterns的{​​{1}}属性设置为:

cc_common.create_cc_toolchain_config_info()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-