将 Clang 3.6 与 MinGW w64 4.8 结合使用

Using Clang 3.6 with MinGW w64 4.8

我有一个使用 MinGW (w64) 的 Clang-based 项目。我正在将它更新到 Clang 3.6。显然 MinGW 在 4.7 中更改了他们的 ABI,而 Clang 现在使用新的 ABI,所以我同时更新了 MinGW。

但是,现在我遇到了一个小问题。使用 Clang 加载 libstdc++ headers 会导致大量编译错误——尤其是关于常量表达式永远不会是常量的内容。我启用了 C++14 和 C++1y 支持。

此外,我无法让 Clang 识别目标是 MinGW。似乎他们对 MinGW 的三重支持在 3.6 中被删除了,现在我不知道如何与 Clang 沟通他们应该发出与 MinGW ABI 兼容的代码。

如何使 Clang 与 MinGW w64 兼容?

您可以通过 -target 使 clang 目标为 MinGW-w64,即:

$ clang -v 2>&1|grep Target
Target: i386-pc-windows-cygnus

$ clang -target i686-w64-mingw32 -v 2>&1|grep Target
Target: i686-w64-windows-gnu

只需将 clang 可执行文件重命名为 i686-w64-mingw32-clang++.exe 也可以满足您的要求。