输出 endl 时的叮当段错误



我正在试用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 ()的调用堆栈。可能导致这种情况的原因是什么,如何解决?

编辑:使用其他 ostream 操纵器(如 std::decstd::unitbuf )时也会发生同样的事情。

LLVM 3.4 有一个关于类似问题的错误。问题似乎是LLVM 3.4和MinGW 4.7 +之间的ABI不兼容,导致拾取i686指令而不是所选目标。

x64 Windows上可能的解决方案是使用MinGW64版本。这应该有效,但正确获取标准库标头可能会很棘手。

建议的解决方案是按照此处的步骤操作,调整目标和系统上的任何路径,然后进行编译。

相关内容

  • 没有找到相关文章

最新更新