当我尝试编译这个简单的程序时:
为什么未定义
更新于 2012年9月17日 (jogojapan):我今天遇到了同样的问题,使用 GCC 4.7.1。除了定义
GCC 4.4也有一个旧的未解决的错误报告:https://bugs.launchpad.net/ubuntu/+source/gcc-4.4/+bug/608145 更新于2012年10月19日(jogojapan):Jonathan Wakely在回答What is _GLIBCXX_USE_NANOSLEEP all about?时解释并解决了此问题。对于自己构建GCC而不是使用现成包的人来说,这尤其相关。
#include<thread>
void f() {
std::this_thread::sleep_for(std::chrono::seconds(3));
}
int main() {
std::thread t(f);
t.join();
}
在Ubuntu 10.04(32位)上使用gcc版本4.4.3:
$ 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
?如何使此示例编译通过?更新于 2012年9月17日 (jogojapan):我今天遇到了同样的问题,使用 GCC 4.7.1。除了定义
_GLIBCXX_USE_NANOSLEEP
外,是否有其他方法可以避免这个问题?我尝试使用-std=gnu11
,但没有用。GCC 4.4也有一个旧的未解决的错误报告:https://bugs.launchpad.net/ubuntu/+source/gcc-4.4/+bug/608145 更新于2012年10月19日(jogojapan):Jonathan Wakely在回答What is _GLIBCXX_USE_NANOSLEEP all about?时解释并解决了此问题。对于自己构建GCC而不是使用现成包的人来说,这尤其相关。
-D_GLIBCXX_USE_NANOSLEEP
修复可以解决它。 - pyCthon