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
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 -
Ich denke
Dass Fehler definitiv passiert, wenn
-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 compilerDies 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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gelöst wurde das problem durch den Kommentar von Jonathan Wakely.
Fügte ich
-pthread
zuC/C++ Build -> Settings -> Tool Settings -> Cross G++ **Linker** -> Miscellaneous -> Other Flags
und das Programm richtig funktioniert.Danke Jonathan.
... -> CCC C++ Linker -> Miscellaneous -> Linker flags
hmm, das macht mein Programm ausführen & debug okey in eclipse, aber die syntax checker gibt mir immer noch Fehler, wenn ich std::thread oder thread.join. Weiß jemand, wie lösen das auch?
InformationsquelleAutor melmi
Arbeit C++11
std::thread
in Eclipse, muss man geben-pthread
- option beim kompilieren. Allerdings nicht genug. In meinem Ubuntu 14.04, mit Eclipse Kepler und g++4.9 unten macht es:und hinzufügen
-pthread
nach-std=c++11
und fügen Sie
pthread
(das entsprichtzu Befehl Linie
-lpthread
)Schließlich re-kompilieren des Projekts; die Fehler gehen sollte.
Denken Sie auch daran, dass, wenn Sie verwenden,
std::thread
dann dessen object sein mussjoin()
irgendwo. Sonst können Sie unter der runtime error:InformationsquelleAutor iammilind
Gehen Projekt - > Eigenschaften > C/C++ General - > Preprocessor include paths, etc > Provider > CDT, GCC-Builtin-Compiler-Einstellungen und Anhängen
-std=c++11
an den compiler specs.Können Sie dies auch tun, für alle Laufenden Projekte zu Fenster - > Einstellungen - > C/C++ - > Build > Einstellungen > Entdeckung und Anhängen
-std=c++11
zu den CDT, GCC-Builtin-Compiler-Einstellungen specs.Projekt-Eigenschaften - > C/C++ Build - > Einstellungen > Werkzeug-Einstellungen > GCC-C++ - Compiler > Sonstiges > Andere Flaggen, fügen Sie
-pthread -std=c++11 -Wl,--no-as-needed
:Projekt-Eigenschaften - > C/C++ Build - > Einstellungen > Werkzeug-Einstellungen > GCC C++ Linker - > Sonstiges > Linker flags, fügen Sie
-pthread -std=c++11 -Wl,--no-as-needed
InformationsquelleAutor robbycandra