Когда я пытаюсь скомпилировать эту простую программу:
#include<thread>
void f() {
std::this_thread::sleep_for(std::chrono::seconds(3));
}
int main() {
std::thread t(f);
t.join();
}
с gcc версии 4.4.3 в Ubuntu 10.04 (32 бита):
$ g++ -std=c++0x -pthread a.cpp -o a
Я получаю:
error: ‘sleep_for’ is not a member of ‘std::this_thread’
Я посмотрел в заголовке 'thread'.
sleep_for () защищен с помощью _GLIBCXX_USE_NANOSLEEP
#ifdef _GLIBCXX_USE_NANOSLEEP
...
/// sleep_for
template<typename _Rep, typename _Period>
inline void
sleep_for(const chrono::duration<_Rep, _Period>& __rtime)
...
Почему _GLIBCXX_USE_NANOSLEEP
не определено?
Как получить этот примерскомпилировать?
Обновление 17 сентября 2012 (jogojapan): я столкнулся с этой же проблемой сегодня, используя GCC 4.7.1.Интересно, есть ли какие-нибудь новости о том, как этого избежать, кроме определения _GLIBCXX_USE_NANOSLEEP
.Я пытался использовать -std=gnu11
, но безрезультатно.
Существует также старый, неразрешенный отчет об ошибках для GCC 4.4: https://bugs.launchpad.net/ubuntu/+source/gcc-4.4/+bug/608145
Обновление 19 октября 2012 г. (jogojapan): Теперь Джонатан Уэйкли объяснил и решил проблему как ответ на этот вопрос: Что такое _GLIBCXX_USE_NANOSLEEP? Это особенно актуально для всех, кто создает GCC сам, а не используетготовая упаковка.