Ich wollte Threads in meinem Code verwenden und dachte, dass die bevorstehenden Erweiterungen C++ 0x nützlich sein würden, da sie irgendwann zu einem Standard werden. Dies schien zukunftssicher zu sein, ohne dass zusätzliche Bibliotheken wie der boost :: thread benötigt wurden.
Leider konnte ich keine nützlichen Informationen darüber finden, welche Features in Bezug auf Threads derzeit von gcc unterstützt werden. Ich benutze unique_locks, die noch nicht funktionieren. Dies ist die Ausgabe des Linkers:Unterstützt gcc unique_locks?
.build_debug/src/core/simulator.o: In function `Simulator::start(int, int, int, int)':
simulator.cpp:(.text+0x1fc): undefined reference to `_ZSt4lockISt11unique_lockISt5mutexES2_IEEvRT_RT0_DpRT1_'
.build_debug/src/core/simulator.o: In function `Simulator::resume()':
simulator.cpp:(.text+0x351): undefined reference to `_ZSt4lockISt11unique_lockISt5mutexES2_IEEvRT_RT0_DpRT1_'
.build_debug/src/core/simulator.o: In function `Simulator::pause()':
simulator.cpp:(.text+0x417): undefined reference to `_ZSt4lockISt11unique_lockISt5mutexES2_IEEvRT_RT0_DpRT1_'
.build_debug/src/core/simulator.o: In function `Simulator::stop()':
simulator.cpp:(.text+0x4cd): undefined reference to `_ZSt4lockISt11unique_lockISt5mutexES2_IEEvRT_RT0_DpRT1_'
Versteht jemand diese Nachrichten? Ich denke, sie beziehen sich auf die Verwendung von unique_locks. Aber warum treten diese Fehler auf?
Mein Quellcode ähnelt diese ein:
std::unique_lock<std::mutex> lkIntra(intraMtx, std::defer_lock); std::unique_lock<std::mutex> lkInter(interMtx, std::defer_lock); std::lock(lkIntra, lkInter);
EDIT: Ich habe versucht, dies mit gcc 4.3.X zu kompilieren und 4.4.5. Der Linker war g ++ 4,3, 4,4 und 4,5.
EDIT2: Ich habe gerade versucht, die Boost-Äquivalente zu den Std-Threads zu verwenden. Nach dem Hinzufügen des Compiler-Flags "-lboost_thread" funktionierte die Kompilation. Ohne den der Verknüpfungsprozess zu ähnlichen Fehlermeldungen geführt hat. Jetzt frage ich mich, ob ich bei der Verwendung von Standard-Threads etwas Ähnliches machen muss (ich habe bereits "-lpthread" ausprobiert).
Welche gcc-Version verwenden Sie, und verknüpfen Sie mit g ++ und nicht gcc? – nos
@nos Bitte sehen Sie sich meine Bearbeitung an. – Bastian