改错半月志:CMake报错(gcc —broken)

2023-05-16

项目场景:

Windows+Vscode+Cmake下

上次误打误撞的报错没了之后后,由于过于高兴,我并没有接着去实现CMakeLists.txt的接下来的操作{我记录一下(在终端输入的)mkdir build(新建build文件夹)———cd build(进入build目录)——cmake -G "MinGW Makefiles" ..(生成Makefiles文件-和configure步骤等效)——make(成了之后直接make就成了)----运行程序cd bin----.\<可执行文件名字>.exe


问题描述

[variant] Loaded new set of variants
[kit] Successfully loaded 1 kits from C:\Users\x\AppData\Local\CMakeTools\cmake-tools-kits.json
[proc] Executing command: "C:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin\gcc.exe" -v
[main] Configuring folder: xue 
[proc] Executing command: D:/下载软件/bin/cmake --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug "-DCMAKE_C_COMPILER:FILEPATH=C:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin\gcc.exe" "-DCMAKE_CXX_COMPILER:FILEPATH=C:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin\g++.exe" -Se:e -Be:eild -G "MinGW Makefiles"
[cmake] Not searching for unused variables given on the command line.
[cmake] -- The C compiler identification is GNU 8.1.0
[cmake] -- The CXX compiler identification is GNU 8.1.0
[cmake] -- Detecting C compiler ABI info
[cmake] -- Detecting C compiler ABI info - failed
[cmake] -- Check for working C compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/gcc.exe
[cmake] -- Check for working C compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/gcc.exe - broken
[cmake] CMake Error at D:/下载软件/cmake-3.23/Modules/CMakeTestCCompiler.cmake:69 (message):
[cmake]   The C compiler
[cmake] 
[cmake]     "C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/gcc.exe"
[cmake] 
[cmake]   is not able to compile a simple test program.
[cmake] 
[cmake]   It fails with the following output:
[cmake] 
[cmake]     Change Dir: E:eild/CMakeFiles/CMakeTmp
[cmake]     
[cmake]     Run Build Command(s):C:/PROGRA~1/MINGW-~1/X86_64~1.0-W/mingw64/bin/mingw32-make.exe -f Makefile cmTC_777d1/fast && C:/PROGRA~1/MINGW-~1/X86_64~1.0-W/mingw64/bin/mingw32-make.exe  -f CMakeFiles\cmTC_777d1.dir\build.make CMakeFiles/cmTC_777d1.dirild
[cmake]     mingw32-make.exe[1]: Entering directory 'E:eild/CMakeFiles/CMakeTmp'
[cmake]     process_begin: CreateProcess(NULL, D:\涓嬭浇杞欢\bin\cmake.exe -E cmake_echo_color --switch= --progress-dir=E:\xue\build\CMakeFiles\CMakeTmp\CMakeFiles --progress-num=1 "Building C object CMakeFiles/cmTC_777d1.dir/testCCompiler.c.obj", ...) failed.
[cmake]     make (e=2): 系统找不到指定的文件。
[cmake]     mingw32-make.exe[1]: *** [CMakeFiles\cmTC_777d1.dir\build.make:76: CMakeFiles/cmTC_777d1.dir/testCCompiler.c.obj] Error 2
[cmake]     mingw32-make.exe[1]: Leaving directory 'E:eild/CMakeFiles/CMakeTmp'
[cmake]     mingw32-make.exe: *** [Makefile:126: cmTC_777d1/fast] Error 2
[cmake]     
[cmake]     
[cmake] 
[cmake]   
[cmake] 
[cmake]   CMake will not be able to correctly generate this project.
[cmake] Call Stack (most recent call first):
[cmake]   CMakeLists.txt:2 (project)
[cmake] 
[cmake] 
[cmake] -- Configuring incomplete, errors occurred!
[cmake] See also "E:eild/CMakeFiles/CMakeOutput.log".
[cmake] See also "E:eild/CMakeFiles/CMakeError.log".

注意:我是在windows下用的小白(网上都是大佬的Ubuntu报错比较多)

大家不要光看[cmake]   It fails with the following oautput:后面的,大家先从前面开始看一看(虽然行很多)需要耐心,可以看懂得(虽然我前前后后搞了半个月,,)报错很多很可怕。

在这里大家先对比一下大家自己的报错和上面的报错:

最主要的问题报错是:

[cmake] The C compiler:

[cmake]        "(你自己的编译器文件路径)"

[cmake]   is not able to compile a simple test program.

上述报错意思:即编译器无法正确的编译简单的测试程序

[cmake] CMake will not be able to correctly generate this project./不能正确生成项目

这也是我最开始注意的点(在网上搜来搜去

我要告诉你的是应该先看报错最开头是否出现fail,和broken的提示行:

[cmake] -- Detecting C compiler ABI info - failed

[cmake] -- Check for working C compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/gcc.exe - broken

(xdm,一样的话再接着看)

改错历程(大家最好看看,如果你也被困扰了很久的话,希望给你些坚持的信心):大概是改了十天左右才决定一行一行的去看的,网上我只要是能搜到的办法都去试了,但是都不成,所以没办法了才注意到前面)大家如果是一出现就看到了我的文章,请大家一定要一行行的看一下(有时候看似最长的路也是最直接的。


原因分析:

[cmake] -- Detecting C compiler ABI info - failed

[cmake] -- Check for working C compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/gcc.exe - broken

上一句我并没有太大的收获,然后就一直在和gcc死磕——{大家都开始用cmake了,Mingw-64肯定都安了也会配置vscode了(没有的话后面也不会讲(●ˇ∀ˇ●))

问题排查:我先在vscode里编译了(g++ -g hello.ccp -o hello)一下简单的程序来检查是否是编译器坏了,发现可以生成hello.exe文件,是没有问题的,2,然后我在学长的帮助下了解到了一个网站:stack overflow(它是英文的,,而且有的图片上的英文是不可以用浏览器翻译的),所以看到的时候很崩,但是想想之前做了那些鬼事,我又接着看下去了,这个网站是用来解决报错的,推荐给大家。

我的问题是在看了这篇解决的:

CMake reports GCC is broken. Where do I start? - Stack Overflowhttps://stackoverflow.com/questions/16594053/cmake-reports-gcc-is-broken-where-do-i-start下面这篇是和Ubuntu有关的:(大家感兴趣 的可以看看)

wgcc - "CMAKE_CXX_COMPILER broken" while compiling with CMake - Stack Overflowhttps://stackoverflow.com/questions/31421327/cmake-cxx-compiler-broken-while-compiling-with-cmake


解决方案:

如果你和我的报错一样,解决方法真的离谱。

上面那篇里

INCLUDE(CMakeForceCompiler)
CMAKE_FORCE_C_COMPILER(gcc GNU)
CMAKE_FORCE_CXX_COMPILER(g++ GNU)

这给在很多文章里都看到过,但在我那不管用,,,(作用好像是对编译器的强制声明,,还不大懂,还在学)

我看到最离谱的是这哥的回答:

Same happened with me, in CLion.

Check if your compilers and other things are properly installed and/or configured.

I Re-installed the GCC Compiler and the CMake, then reconfigured my IDE.

and it worked for me since then!

看完我根本没信,,,,,但是但是但是,(15天了,整整半个月了)当所有的方法都不成时,我 的脑海里突然响起:最后的那个最不可能的也是对的。

所以我果断重装了mingw-64。(重装mingw-64时我又遇到了The file has been downloaded incorrectly!,简直痛苦,然后解决了)

然后重新配置了vscode,我一直测试到了底生成了hello.exe,这回是真的成功了。

总结一下:重装MinGw-w64即解决了问题,我花了半个月到最后解决方法却是这么简单,成功的时候我像是范进中举般狂喜,细想下来我真的感慨良多,(为了最后这一步)我东查西找的也学会了很多,但远水解不了近渴,解决不了就会很难受,有时候报错多并不可怕,可怕的是找不到问题的本源,这是我的一些感悟,也纪念下一个报错改15天的坚持吧。如果以后都可以先从最简单的问题开始排除可能就不需要这么久了,大家在看这篇文章不知道会不会用太久,还是谢谢大家看到这里(太不容易了,希望大家都能保持这份恒心)。

---------------------------

时隔一年我又回来了,当时只为做课设学习cmake只是浅尝罢了,现在看之前的博客写的也真的是抽象:今年的计划:会重拾cmake的使用:

1、用于实现机组实验

2、用于树莓派pico开发的学习

3、重新学习c++不止停留在编程语言层面

4、学会并熟练进行VScode等开发环境的配置

后面有时间会持续更新cmake,树莓派,wsl,虚拟机,nfv平台,和机组等相关内容算法和数论看具体情况。CSDN,再冲一波。

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

改错半月志:CMake报错(gcc —broken) 的相关文章

随机推荐

  • c++ delete与析构函数的注意点

    问题 xff1a 我们都知道析构函数在类对象作用域结束时自动调用 xff0c 但这个规则适合基本类型 xff0c 但不适合delete函数 原因 xff1a 如果对象是new运算符动态创建的 xff0c 如果最后没有调用delete xff
  • 超详细!JAVA实现顺序表类

    Seqlist类 增 删 改 查 xff0c 判断是否为空 public class Seqlist lt T gt protected int n 顺序表元素个数 protected Object element 顺序表元素 public
  • 超详细!java实现链表

    Node lt T gt 结点类 public class Node lt T gt 结点类 数据域 xff1a data 存取域 xff1a next public T data 数据域 public Node lt T gt next
  • 超详细!java实现String部分方法

    java的String功能特点 Sring字符串是一个类 xff0c 属于引用数据类型 xff0c 提供比较大小 连接串等方法 String的对象是不是一个字符数组 xff0c 不能以数组下标格式s i 进行操作 xff0c 这和c c 4
  • 关于Java 的throw的一些注意的小点

    throw throw是程序中明确引发异常 xff0c 一旦执行到throw xff0c 程序就会被中断 xff0c 下面的代码就不会被执行 xff01 结论 xff1a 在编写代码阶段 xff0c 即使不运行程序 xff0c throw下
  • 栈究竟是什么?

    我们都知道 栈 这个数据结构 xff0c 它最大的特定就是 后进先出 xff0c 那么就会有一个问题 xff1f 真的存在天生就是 后进先出 的数据结构么 xff1f 答案是没有 xff01 结论 xff1a 栈的 后进先出 的规则是由人为
  • Maven的配置

    maven下载 首先登陆官网 点击download 然后点击下载 下载出来的是一个zip文件 直接解压到没有中文目录的文件夹下 我是放到java 中的 基础配置仓库的修改 打开apache maven gt 找到conf文件夹 gt 打开s
  • A - 简单密码(C语言)

    一 题目 Julius Caesar 曾经使用过一种很简单的密码 对于明文中的每个字符 xff0c 将它用它字母表中后 555 位对应的字符来代替 xff0c 这样就得到了密文 比如字符 A 用 F 来代替 如下是密文和明文中字符的对应关系
  • shell编程 -- 基础

    shell是一个命令行解释器 xff0c 它接收应用程序 用户命令 xff0c 然后调用操作系统内核 linux笔记 链接 xff1a https pan baidu com s 16GZCPfUTRzUqIyGnYwPuUg pwd 61
  • 专为折腾而生!老旧电脑安装PVE虚拟机保姆教程

    专为折腾而生 xff01 老旧电脑安装PVE虚拟机保姆教程 这几天玩VMware虚拟机上瘾 xff0c 感觉特别有意思 然而我其实并不满足于只是在这种软件层面上玩玩 xff0c 而想挑战更高级的玩法 xff0c 比如说玩玩可以安装在实体机上
  • idea中hdfs-api案例 :上传文件

    首先导入相关pom文件 lt dependencies gt lt hadoop相关依赖 gt lt dependency gt lt groupId gt org apache hadoop lt groupId gt lt artifa
  • 洛谷 P2078 朋友

    思路是分为两个并查集 xff0c 然后计算下男女人数 xff0c 然后直接比较 xff0c 选小的 代码写的有点麻烦好像 xff0c 交上去也没过 xff0c 虽然结果对了 其实第一遍已经发现有问题了 xff0c 因为比较的时候不小心把小于
  • 洛谷 P1359 租用游艇

    题目描述 长江游艇俱乐部在长江上设置了 nn 个游艇出租站 1 2 cdots n1 2 n 游客可在这些游艇出租站租用游艇 xff0c 并在下游的任何一个游艇出租站归还游艇 游艇出租站 ii 到游艇出租站 jj 之间的租金为 r i j
  • 寒假“最短路”题解

    1 P1359 租用游艇 题目描述 长江游艇俱乐部在长江上设置了 n 个游艇出租站 1 2 n 游客可在这些游艇出租站租用游艇 xff0c 并在下游的任何一个游艇出租站归还游艇 游艇出租站 ii 到游艇出租站 j 之间的租金为 r i j
  • 八数码问题

    I 问题介绍 八数码问题是一种经典的智力游戏 xff0c 也是一种搜索算法的经典案例 该问题是指在一个 3x3 的棋盘上 xff0c 有 8 个方块和一个空格 xff0c 每个方块上标有 1 8 的数字 xff0c 空格可以和相邻的方块交换
  • 基于VScode的CMake搭建与使用((〃>目<)的报错)

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言 目录 文章目录 前言 一 Vscode和CMake 二 Vscode的C C 43 43 环境搭建 xff08 gcc g
  • vscode 找不到c++头文件(提示更新includePath)

    项目场景 xff1a vscode要写c 43 43 时iostream头文件找不到 xff08 我还找不见了两次 xff0c 记录一下 xff09 问题描述 c 43 43 找不到头文件 xff0c 想编程的心瞬间无了 xff08 首先我
  • vscode用户代码片段

    1 vscode入口 文件 gt 首选项 gt 用户片段 选择不同的应用范围 2 例子 prefix是提示短语 xff0c body是定义的代码片段 xff0c 每段都要双引号加逗号 xff0c 有双引号就需要加转义符 贴一个定义这种语言的
  • Vscode终端汉字乱码的简单解决方法

    这次的问题比较简单 xff0c 但是之间在网上找的时候也花费了些时间 xff1b xff08 记录一下 xff09 原因 xff1a 之所以会乱码主要是因为Vscode的配置的编译器gcc用的是UTF 8编码 xff0c 而windows用
  • 改错半月志:CMake报错(gcc —broken)

    项目场景 xff1a Windows 43 Vscode 43 Cmake下 上次误打误撞的报错没了之后后 xff0c 由于过于高兴 xff0c 我并没有接着去实现CMakeLists txt的接下来的操作 我记录一下 xff08 在终端输