c++ - 输出 endl 时出现 Clang 段错误

标签 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 () .可能是什么原因造成的,如何解决?

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

最佳答案

LLVM 3.4 存在一个待处理的错误 regarding a similar issue .这个问题似乎是 LLVM 3.4 和 MinGW 4.7+ 之间的 ABI 不兼容导致 i686 指令被拾取而不是选定的目标。

在 x64 Windows 上可能的解决方案是使用 MinGW64 build .这应该可行,但正确获取标准库头文件可能会很棘手。

推荐的解决方案是 follow the steps here ,调整系统上的目标和任何路径并让它编译。<​​/p>

关于c++ - 输出 endl 时出现 Clang 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21820185/

相关文章:

c++ - Clang 3.1 和 C++11 支持状态

c++ - 行进立方体,非常小的三角形

c++ - Poco SSLManager 和 SecureStreamSocket 可以支持 SSL/TLS PSK(预共享 key 密码套件)吗?

c++ - 如何在这个程序的输出中得到整数 35 和 50?

C++ Stack类实现

xcode - 在每个功能/每个代码块的基础上启用 SSE4 的正确方法?

c++ - 如何将 TCHAR 数组转换为 std::string?

c++ - 在 C++ 代码中接收段错误

c++ - 递归快速排序导致段错误(不是溢出)

c++ - OS X cmake 链接 stdlibc++,mongodb c++ 驱动程序问题