이 게시물의 하단에있는 코드 3.3 잘 컴파일하지만,이 명령이스레딩 지원 ++ C++ 11
clang++ -std=c++11 -pthread -s -O3 -DNDEBUG source.cpp -o source
바이너리 주어지면
$ clang++ -v
clang version 3.3 (trunk 168461)
Target: x86_64-unknown-linux-gnu
Thread model: posix
과 쓸모없는 바이너리를 생성 내가하지 않는 것은이
terminate called after throwing an instance of 'std::system_error'
what(): Operation not permitted
Aborted (core dumped)
항상 생성 :
- C++ 11에 스레딩 모델이 표준으로 포함되어있는 경우 POSIX 스레드 라이브러리를 링크해야하는 이유는 무엇입니까?
-std=c++11
플래그가 충분하지 않은 이유는 무엇입니까? - 그 소리가 ++ 나는 그것이의 pthreads에게
감사를 지원해야 읽은 내용에 따라, -pthread
여부를 지원하는 경우.
if (!__gthread_active_p())
__throw_system_error(int(errc::operation_not_permitted));
당신을 위해 폭파 왜 이것은 --- 관하여 libgcc 검사에 대한 : thread.cc에서
#include <iostream>
#include <thread>
void f()
{
std::cout << "Hello World\n";
}
int main()
{
std::thread t(f);
t.join();
}
clang을 사용할 때는 표준 라이브러리로 libC++를 사용해야합니다. 그냥 컴파일러 args에'-stdlib = libC++'를 추가하면된다. – inf
@bamboon 예, 저는 이미 그를 시도해달라고 요청했습니다. – Ali
libstdC++ (libC++ 아님)를 사용하는 경우 명령 줄에'-D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 -D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 -D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 -D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8'을 추가하려고 시도 했습니까? 상황이 개선되는지 확인하십시오. 배경 정보 [여기] (http://llvm.org/bugs/show_bug.cgi?id=12730). –