参考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