将 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
也可以满足您的要求。
我有一个使用 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
也可以满足您的要求。