【问题标题】:clang doesn't know std::atomic_bool, but XCode doesclang 不知道 std::atomic_bool,但 XCode 知道
【发布时间】:2012-12-17 15:37:41
【问题描述】:

我正在尝试编译声明 std::atomic_bool 类型变量的 C++11 代码。这是在带有 clang 的 Mac OS 10.8.2 上:

clang --version
Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin12.2.0
Thread model: posix

clang 抱怨 std::atomic_bool:

clang++ -c -stdlib=libc++ -msse4 -std=c++11 -Wno-unused-parameter -I. -o query.o query.cpp
In file included from query.cpp:1:
[...]
./threadutils.h:33:10: error: no type named 'atomic_bool' in namespace 'std'; did you mean 'atomic_long'?
    std::atomic_bool work;

但是,相同的文件在使用相同编译器的 XCode 项目中编译得很好。所以我假设我在手动编译器调用中遗​​漏了一些东西。

我尝试了一些变体,例如-std=c++0x-std=gnu++11,但均无济于事。

【问题讨论】:

  • 给我们看一些代码。看起来 clang 3.1 支持原子所以可能是编码问题。

标签: c++ macos c++11 clang std


【解决方案1】:

我想通了。不幸的是,我在我的问题中设置了一个错误标志:它在 XCode 中也不起作用,我在那里导入了不同版本的源文件。

问题是C++11定义了“一个命名类型atomic_bool对应于指定的atomic<bool>”,但是clang doesn't support that

将类型从 atomic_bool 重命名为 atomic<bool> 修复了它。

【讨论】:

    【解决方案2】:

    我发现了同样的问题。就我而言,我通过包含 atomic 来解决它:

    #include <atomic>
    static std::atomic_bool varname;
    

    之后,我可以在 Linux (Ubuntu) 上使用 std=c++11 调用 g++,并在 XCode 上进行编译。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 2018-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多