Ho provato a testare un esempio di thread C++ 11 in Eclipse. Ma ho ricevuto questo messaggio quando si esegue il programma:Come far funzionare CDT/Eclipse con i thread C++ 11?
terminate called after throwing an instance of 'std::system_error' what(): Operation not permitted'
Il mio sistema: ubuntu + gcc 4.7
Programma:
#include <iostream>
#include <thread>
void worker()
{
std::cout << "hello from worker" << std::endl;
}
int main(int argc, char **argv)
{
std::thread t(worker);
t.join();
}
... e sì, ho messo -std=c++11
e -pthread
all'interno C/C++ Build -> Settings -> Tool Settings -> Cross G++ Compiler -> Miscellaneous -> Other Flags
.
Eventuali commenti?
Sembra strano mettere queste impostazioni in una sezione "cross compilatore" (ma non conosco Eclipse). Il crash è ripetibile se il flag '-pthread' non è presente sulla riga di comando e sono installate altre versioni di libstdC++. Assicurati quindi che il flag venga effettivamente passato al compilatore. – Mat
Questa è un'eccezione di runtime, quindi il codice viene compilato correttamente. Ancora non capisco in quali casi questo messaggio di eccezione dovrebbe verificarsi ... – Klaim
@Klaim: l'errore si verifica se si collega il libstdC++ sbagliato, il che può accadere se si hanno più versioni installate e non si passa '- pthread' (o la tua installazione GCC è borked) – Mat