我正在尝试使用Clang(版本3.4,通过Windows预构建的二进制文件)来查看它是否适合替代GCC(版本4.8.1,使用MinGW);但是,我无法让一个简单的程序工作。
#include <iostream>
int main()
{
std::cout << std::endl;
}
Clang能够编译和链接程序,但运行它会产生SIGSEGV
信号,返回代码为0xC0000005
。输出字符串工作正常,但std::flush
导致相同的结果,但允许流自动刷新本身是可以的。
调试程序只显示一个包含__mingw_CRTStartup()
的调用堆栈(Clang使用的是libstdc ++,因为它没有安装libc ++)和std::cout ()
。可能导致这种情况的原因,以及如何解决?
编辑:使用std::dec
和std::unitbuf
等其他ostream操纵符时会发生同样的事情。
答案 0 :(得分:4)
LLVM 3.4 regarding a similar issue还有一个待定的错误。问题似乎是LLVM 3.4和MinGW 4.7+之间的ABI不兼容,导致i686指令被拾取而不是所选目标。
x64 Windows上的可能解决方案是使用MinGW64 build。这应该可行,但正确的标准库标题可能会很棘手。
建议的解决方案是follow the steps here,调整目标和系统上的任何路径并将其编译。