【发布时间】:2014-03-16 05:22:31
【问题描述】:
我正在尝试 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)时也会发生同样的情况。
【问题讨论】:
-
我猜你的标准库版本不匹配。你是如何安装 libstdc++ 的,你是如何编译和链接你的可执行文件的?
-
@NateKohl 我正在使用由 mingw-get 与 GCC 的其余部分一起安装的 libstdc++ 版本。至于编译,我在命令行中使用
clang++ a.cpp。 -
可能添加“return 0”或替换为“void main()”
-
@Kyle 这可能是一个愚蠢的建议,但请确保您的库路径指向正确的标准库(即安装的一个 MinGW,而不是您系统上以前已经存在的任何一个)。可以肯定的是,查看 MinGW 将它的库放在哪里并使用 -l 标志来确保它正在链接。
标签: c++ segmentation-fault clang