2012-11-19 5 views
4

Можно создать дубликат:
Why does this simple std::thread example not work?Почему эта программа выбрасывает «std :: system_error»?

Код:

#include <iostream> 
#include <thread> 

void f() 
{ 
    std::cout << "hi thread" << std::endl; 
} 

int main() 
{ 
    std::thread t(f); 
    std::cout << "hi" << std::endl; 
    t.join(); 
} 

Издание:

$ g++ -o thread_test thread_test.cpp -std=c++0x 
$ ./thread_test   
terminate called after throwing an instance of 'std::system_error' 
    what(): Operation not permitted 
Abortado 

"Abortado" означает "прерванный" я n мой язык.

ответ

9

Вы должны связать его с pthread:

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

libstdc++ «s std::thread реализация требует, чтобы связать свои приложения libpthread, в противном случае они будут бросать std::system_error при попытке создать поток.

+4

Может кто-нибудь ссылку на сообщение об ошибке или цепочку электронной почты или что-то там, где кто-то оправдывает, почему это не выбрасывается как ошибка компоновщика? Как это не ошибка компоновщика, которую следует поймать тогда? –

+0

@Kevin Очень интересный вопрос. Однако я не могу найти ответы на них. Возможно, вы захотите задать этот вопрос в новом потоке, а не только в комментарии, чтобы узнать, подсказывает ли кто-нибудь подсказку. – mfontanini