2013-06-04 59 views
1

我有一个项目,我一直在工作一段时间,总是在调试。 今天我试着建立一个版本,并且它没有编译出一些非常奇怪的错误。 而调试编译没有任何警告,发布抛出:GCC C++ 11调试版本,发布失败

/usr/include/c++/4.7/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options. 

两个CMake的构建有C++ 11启用:

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=gnu++11 -Wall -g") 
set(CMAKE_CSS_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=gnu++11 -Wall") 

如何追踪是什么原因造成版本编译错误?

编辑我使用的是Cmake 2.8,并试图用gcc-4.6.3和4.7.2编译,两者都有相同的问题。

编辑#2使用-std = C++ 0x而不是C++ 11时问题仍然存在。

编辑#3降级到g ++ 4.6并没有太大的帮助。错误现在只是改为:

/usr/include/c++/4.6/bits/c++0x_warning.h:32:2:etc... 

编辑#4我已删除<thread>最先引起的问题。然后是<mutex><atomic>。现在它是使用std::shared_ptr<Blah>的任何一段代码。 在我看来,如果Release不想用C++ 11进行编译。这是故意的吗?

回答

2

我敢打赌,这个问题来源于此行:

set(CMAKE_CSS_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=gnu++11 -Wall") 

瞧,你设置变量CMAKE_CSS_FLAGS_RELEASE。有可能你只是想设置变量CMAKE_CXX_FLAGS_RELEASE。这将解释为什么您的C++ 11在发布模式下未启用。

1

我已经通过简单地移除CXX_FLAG,并使用CMake的的添加定义固定的问题:

add_definitions("-std=gnu++11") 

我不知道为什么,这使得它的工作,为什么调试工作,但释放没有,但它造成了很大的变化。