Wie man CDT/Eclipse mit C++11-threads?

Habe ich versucht zu testen, eine Beispiel von C++11 threads in Eclipse. Aber ich bekam diese Meldung, wenn das Programm läuft:

kündigen, genannt nach dem werfen einer Instanz von 'std::system_error'
was(): Operation not permitted'

Mein system: ubuntu + gcc 4.7

Programm:

#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();
}

...und ja, ich lege -std=c++11 und -pthread innen C/C++ Build -> Settings -> Tool Settings -> Cross G++ Compiler -> Miscellaneous -> Other Flags.

Irgendwelche Kommentare?

Sieht seltsam aus, um diese Einstellungen in einem "cross-compiler" Bereich (aber ich weiß nicht, Eclipse). Der Absturz ist wiederholbar, wenn die -pthread flag ist nicht auf der Befehl-Linie, und Sie haben andere Versionen von libstdc++ installiert. So stellen Sie sicher, dass Flagge ist wirklich der übergabe an den compiler
Dies ist eine runtime-exception, so dass der code korrekt kompiliert. Aber ich verstehe nicht, in welchen Fällen diese exception auftreten sollte...
dieser Fehler kommt, wenn du den link an der falschen libstdc++, das kann passieren, wenn Sie mehrere Versionen installiert haben und Sie don ' T-pass - -pthread (oder Ihre GCC installieren geschlafen)
Ich denke -pthread an-compiler, da ich es in der gleichen Stelle, dass ich -std=c++11, und der code wird nicht kompiliert, wenn ich nicht setzen -std=c++11. Eine weitere seltsame Sache ist, dass der code funktioniert einwandfrei, wenn ich es kompilieren von der Kommandozeile manuell.
Dass Fehler definitiv passiert, wenn -pthread nicht verwendet (auch wenn Sie nur eine libstdc++ installiert ist). Stellen Sie sicher, dass -pthread ist für den compiler-Befehl und linker-Befehl. Ansonsten libpthread.so wird nicht miteinander verknüpft werden, und threads, die nicht zur Laufzeit angestoßen werden.

InformationsquelleAutor melmi | 2012-05-01

Schreibe einen Kommentar