【问题标题】:Why does Eclipse think clang doesn't support std::atomic为什么 Eclipse 认为 clang 不支持 std::atomic
【发布时间】:2014-05-05 14:52:12
【问题描述】:

我有一个使用一些 c++11 功能的 eclipse c++ 项目。它使用 cmake 进行构建,因此它在 eclipse 中设置为具有现有 makefile 的项目。

无论是在 Eclipse 中还是从命令行中,它都可以使用 makefile 构建良好。但是我收到atomic_bool 的语法错误,说符号无法解析。我在'C/C++ General -> Preprocessor Include Pattern -> Providers -> CDT GCC Built-in Compiler Settings'下添加了-std=c++11,并且我将eclipse中的工具链设置为MacOSX GCC。

注意:threadshared_ptr 等其他 c++11 内容不会给出任何语法错误。

错误来自<atomic> 标头,其中有预处理器if 语句

#if !__has_feature(cxx_atomic)
#error <atomic> is not implemented
#else
...

#else 下方的所有内容均显示为灰色。所以显然__has_feature(cxx_atomic) 根据日食评估为 0。但是如果我从命令行检查它,它表明它应该评估为真。

$ echo '__has_feature(cxx_atomic)' | g++ -x c++ -std=c++11 -E -
# 1 "<stdin>"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 188 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "<stdin>" 2
1

为什么__has_feature(cxx_atomic) 在 Eclipse 中评估为 false,但如果我检查编译器本身却不是?

【问题讨论】:

  • @Praetorian 这不是重复的。 -std=c++0x__GXX_EXPERIMENTAL_CXX0X__ 是 C++11 支持早期的一个 hack。 second answer 提到了我遵循的过程。就我而言,除了原子之外,我尝试过的所有 C++11 都可以正常工作。所以这是一个不同的问题。
  • @Sean Lynch - 我没有你的问题的答案......但是为什么人们更喜欢 CLang 而不是 GCC?我肯定很好奇。提前谢谢!
  • @FoggyDay 我实际上不喜欢它。但是我现在被 OS X 困住了,我觉得当你使用他们希望你在他们的平台上使用的东西时,一切都会更顺利。他们绝对不关心 gcc,我在 OS X 上使用 gcc 时遇到了一些微妙的烦恼。
  • 这不是特定于 clang,我可以使用 Eclipse 4.4 / CDT 8.4 / gcc 4.9.1 复制它。一点运气都没有。

标签: c++ eclipse c++11 clang eclipse-cdt


【解决方案1】:

尝试启用“构建输出解析器”。 http://www.eclipse.org/forums/index.php/t/501479/

【讨论】:

    【解决方案2】:

    我也遇到过这个问题,支持其他 C++11 特性,但是 atomic 不支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-18
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      • 1970-01-01
      相关资源
      最近更新 更多