Compilar o código C ++ com threads C ++ 11

Considere o seguinte código, que usa a biblioteca de threads do C ++ 11 (costumava ser conhecido como C ++ 0x):

#include <iostream>
#include <thread>

using namespace std;

void hello_world()
{
cout
<< "Hello from thread!n";
}

int main()
{
thread t
(hello_world);
t
.join();
return 0;
}

Como podemos fazer isso funcionar? Se o compilarmos com:

g++ bare.cpp -o bare

Obteremos algo como:

/usr/include/c++/4.5/bits/c++0x_warning.h:31:2: error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.

… e talvez algo sobre o threadtipo usado no código:

error: thread was not declared in this scope

Então, adicionamos o std=c++0x

g++ bare.cpp -std=c++0x -o bare

Sem erros durante a compilação, mas quando tentamos executar bare

$ ./bare
terminate called after throwing an instance
of 'std::system_error'
what
():
Aborted

… oops. Temos que vincular isso à implementação de threads do sistema operacional. No Linux, esta é a libpthreadbiblioteca. O comando vencedor é:

g++ bare.cpp -std=c++0x -lpthread -o bare

e depois:

$ ./bare
Hello from thread!