GCC c++ 11调试构建,发布失败



我有一个项目,我已经工作了一段时间,总是在调试。今天我试着构建一个版本,但它无法编译,抛出了一些非常奇怪的错误。当调试编译没有任何警告时,release抛出:

/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编译,两者都有相同的问题。

EDIT#2当使用-std=c++0x而不是c++11时,问题仍然存在。

EDIT#3降级到g++4.6没有多大帮助。错误现在变成了:

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

EDIT#4我已经删除了首先引起问题的<thread>。然后是<mutex><atomic>。现在它是使用std::shared_ptr<Blah>的任何代码片段。在我看来,好像Release根本不想用c++ 11编译。这是故意的吗?

我打赌问题出在这一行:

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

看,你设置了变量CMAKE_CSS_FLAGS_RELEASE。您可能只想设置变量CMAKE_CXX_FLAGS_RELEASE。这就解释了为什么你的c++11没有在发布模式下启用。

我已经通过简单地删除CXX_FLAG修复了这个问题,并使用CMake的添加定义:

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

我不知道为什么这使它工作,为什么调试工作,而发布没有,但它有很大的不同。

最新更新