我正在试用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::dec
和 std::unitbuf
)时也会发生同样的事情。
LLVM 3.4 有一个关于类似问题的错误。问题似乎是LLVM 3.4和MinGW 4.7 +之间的ABI不兼容,导致拾取i686指令而不是所选目标。
x64 Windows上可能的解决方案是使用MinGW64版本。这应该有效,但正确获取标准库标头可能会很棘手。
建议的解决方案是按照此处的步骤操作,调整目标和系统上的任何路径,然后进行编译。