cmake mingw-w64:尝试构建时出现奇怪的错误

Posted

技术标签:

【中文标题】cmake mingw-w64:尝试构建时出现奇怪的错误【英文标题】:cmake mingw-w64: strange error when trying to build 【发布时间】:2020-05-11 12:22:40 【问题描述】:

我已经安装了 MinGW-w64 并构建了一个简单的 Hello World 程序。但是我第二次运行cmake --build . 时发生了一个奇怪的错误。 当 Path 变量设置为 C:/MinGW/bin 时,一切都很好并且可以正常工作。但是当我将路径设置为C:/msys64/mingw64/bin 时,会发生这种情况:

PS C:\repos\hellovs\build> cmake ../ -G Ninja
-- The CXX compiler identification is GNU 10.1.0
-- Check for working CXX compiler: C:/msys64/mingw64/bin/c++.exe
-- Check for working CXX compiler: C:/msys64/mingw64/bin/c++.exe - works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: C:/repos/hellovs/build
PS C:\repos\hellovs\build> cmake --build ./
[2/2] Linking CXX executable HelloVS.exe
PS C:\repos\hellovs\build> cmake --build ./
ninja: error: FindFirstFileExA(c/:/msys64/mingw64/include/c++/10.1.0): ╤шэЄръёшўхёър  ю°шсър т шьхэш Їрщыр, шьхэш яряъш шыш ьхЄъх Єюьр.

HelloVS.exe 在第一次运行构建命令时正常编译。

Apparanteley Ninja 尝试使用无效路径。关于如何解决这个问题的任何想法?


好像生成了无效的依赖:

PS C:\repos\hellovs\build> ninja -t recompact
PS C:\repos\hellovs\build> ninja -t deps
CMakeFiles/HelloVS.dir/main.cpp.obj: #deps 136, deps mtime 6109023486207704 (VALID)
    ../main.cpp
    C/:/msys64/mingw64/include/c++/10.1.0/iostream
    C/:/msys64/mingw64/include/c++/10.1.0/x86_64-w64-mingw32/bits/c++config.h
    C/:/msys64/mingw64/include/c++/10.1.0/x86_64-w64-mingw32/bits/os_defines.h
    C/:/msys64/mingw64/include/c++/10.1.0/x86_64-w64-mingw32/bits/cpu_defines.h
    C/:/msys64/mingw64/include/c++/10.1.0/pstl/pstl_config.h
    C/:/msys64/mingw64/include/c++/10.1.0/ostream
...

【问题讨论】:

Ninja 手册似乎建议 ninja 依赖编译器来生成依赖项。你能检查-MD gcc 标志是否正常工作(在忍者之外)? @HolyBlackCat 我该怎么做? 没关系,我自己试了一下,得到了同样的依赖关系。这意味着这是一个 GCC 问题。我浏览了 MSYS2 gcc 补丁,在这方面它们似乎没有改变任何东西,所以我建议在 GCC 错误跟踪器上抱怨。同时,您可以切换到 Clang(没有这个问题),或者制作一个简单的包装程序来调用 GCC 并修复它生成的文件,并告诉 CMake 使用它而不是 GCC。 @HolyBlackCat 如果删除生成的.ninja_deps,一次构建成功。此外,当我使用 Visual Studio“打开文件夹”时,似乎不会出现此问题。但在 Visual Studio COde 和 CLion 中,它仍然存在。 【参考方案1】:

这是一个 GCC 错误。

MSYS2 维护者决定不等待上游和patched it。

从 MSYS2 shell 运行 pacman -Syuu 以更新您的软件包。

【讨论】:

这里是 gcc repo 中的修复:github.com/gcc-mirror/gcc/commit/…

以上是关于cmake mingw-w64:尝试构建时出现奇怪的错误的主要内容,如果未能解决你的问题,请参考以下文章

为avr构建代码时出现cmake构建问题

使用 mingw-w64 和 cmake 构建 32 位和 64 位应用程序

未定义的参考链接 yaml-cpp 程序与 mingw-w64 + cmake

Windows下的 C++ 编译工具(MinGW-w64 + CMake)

使用 Cmake 文件在 Visual Studio 中构建 Qt 项目时出现链接错误

尝试使用任何 CUDA 功能时出现分段错误