Mingw64编译器为每个源文件错误添加__debugbreak和__fastfail

2023-12-30

我正在尝试构建 GoogleTest C++ 代码来测试静态 C 库。该设置是将被测库静态链接到测试应用程序。一切都可以在 Linux 上正常构建和链接。但是在Windows上,使用MINGW64 shell,有多个定义__debugbreak and __fastfail错误。看起来编译器将这两个函数添加到eachC 源文件对象。在常规 PowerShell 中编译相同的 CMake 设置可以正常工作。

cd C:/Users/Ilya/work/build/foc_lib/test && C:/msys64/mingw64/bin/cmake.exe -E rm -f CMakeFiles/widget-a0_test.dir/objects.a
cd C:/Users/Ilya/work/build/foc_lib/test && C:/msys64/mingw64/bin/ar.exe qc CMakeFiles/widget-a0_test.dir/objects.a @CMakeFiles/widget-a0_test.dir/objects1
cd C:/Users/Ilya/work/build/foc_lib/test && C:/msys64/mingw64/bin/g++.exe  -Wall -Wextra -Werror -fno-exceptions -Wno-unknown-pragmas -pedantic -O0 -DNDEBUG -g -Wl,--whole-archive CMakeFiles/widget-a0_test.dir/objects.a -Wl,--no-whole-archive -o widget-a0_test.exe -Wl,--out-implib,libwidget-a0_test.dll.a -Wl,--major-image-version,0,--minor-image-version,0 @CMakeFiles/widget-a0_test.dir/linkLibs.rsp
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ../libwidget-a0.a(maths.c.obj): in function `__debugbreak':
C:/msys64/mingw64/include/_mingw.h:582: multiple definition of `__debugbreak'; ../libwidget-a0.a(foc.c.obj):C:/msys64/mingw64/include/_mingw.h:582: first defined here
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ../libwidget-a0.a(maths.c.obj): in function `__fastfail':
C:/msys64/mingw64/include/_mingw.h:603: multiple definition of `__fastfail'; ../libwidget-a0.a(foc.c.obj):C:/msys64/mingw64/include/_mingw.h:603: first defined here
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ../libwidget-a0.a(svpwm.c.obj): in function `__debugbreak':
C:/msys64/mingw64/include/_mingw.h:582: multiple definition of `__debugbreak'; ../libwidget-a0.a(foc.c.obj):C:/msys64/mingw64/include/_mingw.h:582: first defined here
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ../libwidget-a0.a(svpwm.c.obj): in function `__fastfail':
C:/msys64/mingw64/include/_mingw.h:603: multiple definition of `__fastfail'; ../libwidget-a0.a(foc.c.obj):C:/msys64/mingw64/include/_mingw.h:603: first defined here
collect2.exe: error: ld returned 1 exit status
  1. 为什么Windows编译器要添加这些函数each源对象?
  2. 解决这个错误的好方法是什么?

gcc.exe(Rev6,由 MSYS2 项目构建)12.2.0

cmake 版本 3.25.1


我确实找到了解决方案。也许不是最优雅的,但很有效。

mingw64中有一个文件intrin.h。描述了它存在的原因here https://mingw-w64-public.narkive.com/9uy03D8V/what-is-the-purpose-of-intrin-h。包含它可以解决上述构建错误。

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

Mingw64编译器为每个源文件错误添加__debugbreak和__fastfail 的相关文章

随机推荐