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

问题描述 投票:0回答:2

我想将MinGW作为C编译器运行。 MinGW已从Chocolatey安装。调用是从gitlab-runner到CMake。失败与

$ 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

[从各种Web来源了解,如果系统[1]上存在sh.exe,则MinGW必然会失败。但是,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[2]CLion: Error:The C compiler "C:/MinGW/bin/gcc.exe" is not able to compile a simple test program[3] [每Cake 3.16.1的https://cmake.org/cmake/help/latest/generator/MSYS%20Makefiles.html#generator:MSYS%20Makefiles

makefile cmake mingw chocolatey
2个回答
1
投票

[经过长时间的实验,我得出的结论是问题出在Chocolatey的MinGW包装上。在我

  • 从Chocolatey卸载了MinGW软件包,
  • 使用原始MinGW安装程序重新安装了MinGW,
  • 安装了忍者巧克力包,
  • 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可以正常工作。

1
投票

sh.exe仅在尝试生成项目时第一次运行CMake时出现问题。您可以再次重新运行CMake,CMake将继续进行正常处理以生成项目(在版本3.16中进行测试)。我看到了一个补丁,它删除了此检查,应该是CMake将来版本的一部分。

已经提到gcc的安装不正确。当有人提到gcc失败并显示Error 1消息时,情况似乎总是如此。应当注意,Error 1不是来自CMakeCMake只是从运行mingw32-make来构建示例项目时收集输出。

输出-- The C compiler identification is unknown中的第一条消息是很清楚的消息,表明您的编译器无法正常工作。此步骤的所有输出都在CMake在build文件夹中生成的日志和错误文件中。您将能够看到它如何调用编译器以及带有哪些选项和编译器的输出。

© www.soinside.com 2019 - 2024. All rights reserved.