#gcc4.7.2编译以支持c++11标准,解决not a member问题

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

你可能感兴趣的:(#gcc4.7.2编译以支持c++11标准,解决not a member问题)