Я хотел использовать потоки в своем коде и думал, что будущие расширения C ++ 0x будут полезны, поскольку в конечном итоге они станут стандартом. Казалось, что это будущее, без необходимости использования дополнительных библиотек, таких как boost :: thread.
К сожалению, я не смог найти полезную информацию о том, какие функции в отношении потоков в настоящее время поддерживаются 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_'
Кто-нибудь понимает эти сообщения? Я предполагаю, что они имеют в виду использование unique_locks. Но почему возникают эти ошибки?
Мой исходный код похож на этот:
std::unique_lock<std::mutex> lkIntra(intraMtx, std::defer_lock);
std::unique_lock<std::mutex> lkInter(interMtx, std::defer_lock);
std::lock(lkIntra, lkInter);
РЕДАКТИРОВАТЬ: Я пытался скомпилировать это с GCC 4.3.X и 4.4.5. Линкер был g ++ 4.3, 4.4 и 4.5.
РЕДАКТИРОВАТЬ 2: Я просто пытался использовать буст-эквиваленты для std-threads. После добавления флага компилятора "-lboost_thread" компиляция сработала. Без которого процесс связывания приводил к подобным сообщениям об ошибках. Теперь мне интересно, нужно ли мне делать что-то похожее при использовании стандартных потоков (я уже пробовал "-lpthread").