在输出endl时clang段错误

时间:2014-02-17 03:26:56

标签: c++ segmentation-fault clang

我正在尝试使用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::decstd::unitbuf等其他ostream操纵符时会发生同样的事情。

1 个答案:

答案 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,调整目标和系统上的任何路径并将其编译。