С++ 11 Ошибка Async seg

Я просто пытаюсь использовать некоторые из новых возможностей С++ 11 с помощью GCC 4.7.2, хотя, когда я иду запускать сегрегацию, происходит.

$ ./a.out
Message from main.
terminate called after throwing an instance of 'std::system_error'
  what():  Unknown error -1
Aborted (core dumped)

Я скомпилировал с функциями "бета" GCC в отношении С++ 0x с:

g++ -std=c++11 c11.cpp

Код:

#include <future>
#include <iostream>

void called_from_async() {
  std::cout << "Async call" << std::endl;
}

int main() {
  //called_from_async launched in a separate thread if possible
  std::future<void> result( std::async(called_from_async));

  std::cout << "Message from main." << std::endl;

  //ensure that called_from_async is launched synchronously 
  //if it wasn't already launched
  result.get();

  return 0;
}

Ответ 1

Я считаю, что это происходит потому, что вы забыли связать с библиотекой потоков POSIX. Просто добавьте -pthread или -lpthread к флагам g++, и проблема должна исчезнуть.

Если вас интересуют подробности, это происходит потому, что среда выполнения С++ 11 разрешает символы из pthread во время выполнения, только если вы используете эти функции. Поэтому, если вы забыли связать, среда выполнения не сможет разрешать эти символы, обрабатывать вашу среду, как если бы она не поддерживала потоки, а также исключать исключение (которое вы не улавливаете и прерываете свое приложение).