首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCC C++11调试构建,发布失败

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

Stack Overflow用户
提问于 2013-06-04 01:25:02
回答 2查看 1K关注 0票数 1

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

代码语言:javascript
复制
/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:

代码语言:javascript
复制
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并没有多大帮助。该错误现在简单地更改为:

代码语言:javascript
复制
/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编译。这是故意的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-04 08:37:46

我敢打赌问题就出在这条线上:

代码语言:javascript
复制
set(CMAKE_CSS_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=gnu++11 -Wall")

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

票数 2
EN

Stack Overflow用户

发布于 2013-06-04 02:56:37

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

代码语言:javascript
复制
add_definitions("-std=gnu++11")

我不知道为什么这样做使它工作,为什么调试工作,但发行没有,但它带来了很大的不同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16908399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档