MinGW C 编译器“无法编译简单的测试程序”

2024-04-07

我想将 MinGW 作为 C 编译器运行。 MinGW 已从 Chocolatey 安装。调用是通过 CMake 从 gitlab-runner 进行的。这失败了

$ cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc -DLIB_MAN=OFF -DCMAKE_INSTALL_PREFIX=C:\opt\x64 -B. ..
-- The C compiler identification is unknown
-- Check for working C compiler: C:/ProgramData/chocolatey/bin/x86_64-w64-mingw32-gcc.exe
-- Check for working C compiler: C:/ProgramData/chocolatey/bin/x86_64-w64-mingw32-gcc.exe -- broken
CMake Error at C:/Program Files/CMake/share/cmake-3.16/Modules/CMakeTestCCompiler.cmake:60 (message):
  The C compiler

    "C:/ProgramData/chocolatey/bin/x86_64-w64-mingw32-gcc.exe"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: C:/gitlab-runner/builds/zjE1Mkfg/0/mlz/kww/build/CMakeFiles/CMakeTmp

    Run Build Command(s):C:/ProgramData/chocolatey/bin/mingw32-make.exe cmTC_ffa53/fast && C:/ProgramData/chocolatey/lib/mingw/tools/install/mingw64/bin/mingw32-make -f CMakeFiles\cmTC_ffa53.dir\build.make CMakeFiles/cmTC_ffa53.dir/build
    mingw32-make[1]: Entering directory 'C:/gitlab-runner/builds/zjE1Mkfg/0/mlz/kww/build/CMakeFiles/CMakeTmp'
    Building C object CMakeFiles/cmTC_ffa53.dir/testCCompiler.c.obj
    C:\ProgramData\chocolatey\bin\x86_64-w64-mingw32-gcc.exe    -o CMakeFiles\cmTC_ffa53.dir\testCCompiler.c.obj   -c C:\gitlab-runner\builds\zjE1Mkfg\0\mlz\kww\build\CMakeFiles\CMakeTmp\testCCompiler.c
    mingw32-make[1]: *** [CMakeFiles\cmTC_ffa53.dir\build.make:65: CMakeFiles/cmTC_ffa53.dir/testCCompiler.c.obj] Error 1
    mingw32-make[1]: Leaving directory 'C:/gitlab-runner/builds/zjE1Mkfg/0/mlz/kww/build/CMakeFiles/CMakeTmp'
    mingw32-make: *** [Makefile:120: cmTC_ffa53/fast] Error 2





  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:6 (project)


-- Configuring incomplete, errors occurred!
See also "C:/gitlab-runner/builds/zjE1Mkfg/0/mlz/kww/build/CMakeFiles/CMakeOutput.log".
See also "C:/gitlab-runner/builds/zjE1Mkfg/0/mlz/kww/build/CMakeFiles/CMakeError.log".


ERROR: Job failed: exit status 1

从各种网络来源我了解到 MinGW 注定会失败,如果sh.exe存在于系统中[1]。然而,sh.exe附带了几个应用程序,其中包括 Git 和 Visual Studio,我无法删除它们。建议在某处添加-DCMAKE_SH="CMAKE_SH-NOTFOUND",但是没有任何效果。

我在 2015 年看到过一个相关问题 [2],但其中涉及CLion。唯一获得赞成的答案包含几个损坏的链接 - 总的来说,该线程没有帮助。

如何进行?有没有机会解决这个问题sh.exe问题?

网上的其他建议建议使用-G "MSYS Makefiles"。然而,CMake 文档 [3] 似乎排除了这一点:“与 Windows 命令提示符不兼容。要在 Windows 命令提示符下构建,请使用 MinGW Makefiles 生成器。”

[1] https://stackoverflow.com/a/7411982/1017348 https://stackoverflow.com/a/7411982/1017348
[2] CLion:错误:C 编译器“C:/MinGW/bin/gcc.exe”无法编译简单的测试程序 https://stackoverflow.com/questions/29883383
[3] https://cmake.org/cmake/help/latest/generator/MSYS%20 Makefiles.html#generator:MSYS%20 Makefile https://cmake.org/cmake/help/latest/generator/MSYS%20Makefiles.html#generator:MSYS%20Makefiles根据 CMake 3.16.1


经过长时间的实验,我得出结论,问题出在Chocolatey对MinGW的包装上。我之后问题就消失了

  • 从 Chocolatey 卸载了 MinGW 软件包,
  • 使用原始 MinGW 安装程序重新安装 MinGW,
  • 安装了 Ninja Chocolatey 包,
  • 插入C:\MinGW\bin在之上PATH.
$ cmake -G "Ninja" -DLIB_MAN=OFF -DCMAKE_INSTALL_PREFIX=C:\opt\x64 -B. ..
-- The C compiler identification is GNU 8.2.0
-- Check for working C compiler: C:/MinGW/bin/gcc.exe
-- Check for working C compiler: C:/MinGW/bin/gcc.exe -- works

另请注意:

  • 没有必要-DCMAKE_C_COMPILER=...
  • 我没有努力去得到-G "MinGW Makefile"在职的;-G Ninja工作得很好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MinGW C 编译器“无法编译简单的测试程序” 的相关文章

随机推荐