我正在尝试 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::dec
和 std::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/