为什么这段代码不能用clang构建,用gcc崩溃,但用VC ++运行良好?

时间:2014-11-23 23:47:49

标签: c++ multithreading visual-c++ gcc clang

此代码:

#include <iostream>
#include <future>

int main()
{
    std::async([]{std::cout << "hello\n";}).get();
}

运行正常并使用Visual C ++ 2013打印hello,但在gcc生成时抛出异常:

terminate called after throwing an instance of 'std::system_error'
what():  Unknown error -1

并且甚至没有使用clang构建,产生此错误消息:

/usr/bin/ld: /tmp/source-83f28e.o: undefined reference to symbol 'pthread_setspecific@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我使用rexter来运行测试。你能解释一下这种行为吗?

修改

使用-pthread编译器选项gcc版本现在运行正常并且可以生成clang版本并生成:

hello
exception_ptr not yet implemented

1 个答案:

答案 0 :(得分:2)

为了添加对多线程的支持,您需要链接到pthread库。这是GCC和Clang上的-pthread(作为内置标志提供)。或者,-lpthread可以做到这一点。