2015-07-11 45 views
0

我有一个使用MinGW(w64)的基于Clang的项目。我正在将其更新到Clang 3.6。显然MinGW在4.7中改变了他们的ABI,而Clang现在使用了这个新的ABI,所以我同时更新了MinGW。使用Clang 3.6和MinGW w64 4.8

但是,现在我有一个小问题。使用Clang加载libstdC++头文件会导致很多编译错误 - 特别是关于常量表达式永远不会保持不变的东西。我已经启用了C++ 14和C++ 1y支持。

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

我该如何让Clang与MinGW w64兼容?

+0

可能有帮助http://stackoverflow.com/questions/25170594/changing-compiler-from-mingw32-to-clang-in-codelite-windows-results-in-compila – OMGtechy

+0

我见过这样的结果,但它们都适用于Clang 3.5或更早版本,我已经成功地开展了这项工作。我特别需要3.6的东西。 – Puppy

回答

3

您可以通过-target使铛目标的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 

只需重命名铛可执行i686-w64-mingw32-clang++.exe也可以做你想做的。

+0

花了很长时间,但我的测试表明,这个解决方案解决了我22个有问题的测试中的9个。我会进一步评论,并可能接受这个答案,一旦我看了其余的13次失败。 – Puppy

+0

我调查了其余的测试并修复了大部分测试。对于任何Clang-MinGW兼容性原因,我没有理由认为其余的内容已经损坏。因此,我会接受这是正确的解决方案。 – Puppy

+0

第一个例子是cygwin,对吧? – rogerdpack