C++11 error: ‘sleep_for’ is not a member of ‘std::this_thread’

原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: C++11 error: ‘sleep_for’ is not a member of ‘std::this_thread’

背景:为了学习c++11的多线程和lamda表达式的特性,升级了gcc(从4.4.6到4.7.1),写完thread程序编译时却发现还是遇到了一些问题。

原因:GCC没有定义这个宏:_GLIBCXX_USE_NANOSLEEP

解决办法:编译时加上选项:-D_GLIBCXX_USE_NANOSLEEP

或者:修改gcc的c++config.h文件去定义这个宏
再或者:重新安装gcc且使用选项:--enable-libstdcxx-time

详情
(1)std::this_thread::sleep_for() and GCC
(2)来自Jonathan Wakely(a maintainer of the GNU C++ Standard Library (libstdc++) )的回答:
What is _GLIBCXX_USE_NANOSLEEP all about?

see alsoC++11 'yield' is not a member of 'std::this_thread'

参考http://blog.csdn.net/cssmhyl/article/details/8114386编译4.7.2,对原作者表示感谢。

使用g++4.7.2熟悉c++11,遇到下面问题。。

'thread' isnotamemberof 'std

'yield' is not a member of 'std::this_thread'

sleep_for’ is not a member of ‘std::this_thread’

原因是编译时缺少选项所致,导致一些宏未产生在诸如c++config.h这样的文件中,编译出来的gcc有些新的命名空间对象对外隐藏了。

_GLIBCXX_HAS_GTHREADS _GLIBCXX_USE_NANOSLEEP _GLIBCXX_USE_SCHED_YIELD
这些宏只有被定义才能使用一些新函数 空间域 等,可以使用g++ -D宏名 来临时解决。

想一劳永逸只能重编gcc

只不过编译选项改为

configure --enable-languages=c,c++ --enable-libstdcxx-time --disable-checking --prefix=/usr/local/gcc-4.7.2 --disable-multilib --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2 --with-mpc=/usr/local/mpc-0.8.1

--enable-languages,说明你要让你的gcc支持那些语言

--enable-libstdcxx-time,开启c++2011的一些新特性 时间 yield nanosleep this_thread etc..

--disable-multilib不生成编译为其他平台可执行代码的交叉编译器

--disable-checking生成的编译器在编译过程中不做额外检查

具体见官方http://gcc.gnu.org/install/configure.html文档。
libstdc++见http://gcc.gnu.org/onlinedocs/libstdc++/manual/configure.html

重编后,g++可以使用c++11新特性。使用-std=c++11选项。

g++ -std=c++11 testc++11.cpp

原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: C++11 error: ‘sleep_for’ is not a member of ‘std::this_thread’

文章的脚注信息由WordPress的wp-posturl插件自动生成



|2|left
打赏

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: