GCC C ++ 11调试版本,发布失败

时间:2013-06-04 01:25:02

标签: c++ c++11 cmake release eigen3

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

/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")

如何跟踪Release中导致编译错误的原因?

编辑我正在使用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 个答案:

答案 0 :(得分: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 :(得分:1)

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

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

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