使用-fsanitize = undefined(mingw-w64)时找不到-lubsan

muz*_*d75 5 c++ gcc compiler-errors compilation g++

我正在使用mingw-w64(gcc 7.3.0),并且在使用以下命令编译任何C ++程序时:

g++ file.cpp -fsanitize=undefined
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

... mingw32 / bin / ld.exe:找不到-lubsan

但是,如果删除该-fsanitize=undefined标志,则能够成功编译并运行程序。经过一些研究,我发现这意味着缺少库ubsan(未定义行为消毒剂),但是我找不到关于库的任何信息。我该如何解决?

Kon*_*rov 2

这是 mingw 的众所周知的问题,例如这个 msys github 问题。没有已知的适当解决方案,但有几个 WA。

  1. 安装 WSL、ubuntu over WSL,里面就会有 ubsan
  2. 在 Windows 下从源代码构建 GCC,从而支持 Sanitizer 构建。它们存在于 GCC 来源中,只是不存在于 mingw 中。
  3. 使用 -fsanitize=undefined -fsanitize-undefined-trap-on-error 不使用 libubsan 丰富的日志记录功能,而是在未定义的指令上捕获它。

希望其中之一有所帮助。