此代码:
#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
答案 0 :(得分:2)
为了添加对多线程的支持,您需要链接到pthread库。这是GCC和Clang上的-pthread
(作为内置标志提供)。或者,-lpthread
可以做到这一点。