我有一个我已经工作了一段时间的项目,总是在调试中。今天,我尝试构建一个版本,但是它无法编译,抛出了一些非常奇怪的错误。当调试在没有任何警告的情况下编译时,版本会抛出:
/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")如何跟踪发行版中导致编译错误的原因?
编辑我使用的是Cmake2.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 I已经删除了<thread>,它首先引起了问题。然后是<mutex>和<atomic>。现在,任何使用std::shared_ptr<Blah>的代码都是如此。在我看来,发行版似乎根本不想用C++11编译。这是故意的吗?
发布于 2013-06-04 08:37:46
我敢打赌问题就出在这条线上:
set(CMAKE_CSS_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=gnu++11 -Wall")看,您设置了变量CMAKE_CSS_FLAGS_RELEASE。您很可能只是想要设置变量CMAKE_CXX_FLAGS_RELEASE。这将解释为什么在发布模式下没有启用c++11。
发布于 2013-06-04 02:56:37
我通过简单地删除CXX_FLAG并使用CMake的添加定义解决了这个问题:
add_definitions("-std=gnu++11")我不知道为什么这样做使它工作,为什么调试工作,但发行没有,但它带来了很大的不同。
https://stackoverflow.com/questions/16908399
复制相似问题