【问题标题】:How to include <atomic> in C++ on Linux?如何在 Linux 上的 C++ 中包含 <atomic>?
【发布时间】:2012-06-02 23:17:21
【问题描述】:

我正在尝试在我的 C++ pthread 程序中包含 atomic。

#include <atomic>

但是,我得到了错误:

错误:原子:没有这样的文件或目录

我试过了:

 #include <asm/atomic>
 #include <atomic.h>
 #include <linux/atomic>
 #include <util/atomic>
 #include <stdcatomic>
 #include <catomic>

没有人工作。

我的 gcc 是 gcc 版本 4.1.2 20080704 (Red Hat 4.1.2-52)

帖子:

#include <cstdatomic> "no such file" in ubuntu

std::atomic support in g++ 4.4.3

也不行。

And #include <thread> also got : No such file or directory

任何帮助将不胜感激。

谢谢!

更新,

我正在尝试在 Linux 上安装 GCC 4.7,但在“make check”中出现错误,

   autogen -T /remote/mypath/gcc_4_7_2012_5_28/gcc_4_7_new_2012_5_29/trunk/fixincludes/check.tpl , remote/mypath/gcc_4_7_2012_5_28/gcc_4_7_new_2012_5_29/trunk/fixincludes/inclhack.def ,

   make[2]: execvp: autogen: Permission denied, then I tried to install autogen, but 
   got: I need to install guile-devel, then when I installed guile-2.0.5-2.1.src.rpm , 

   I got  rpm -ivh guile-2.0.5-2.1.src.rpm, warning: guile-2.0.5-2.1.src.rpm: Header V3 
   RSA/SHA256 signature: NOKEY, key ID 3dbdc284

   error: cannot write to %sourcedir /usr/src/redhat/SOURCES, I cannot get root 
   authorization. 

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 先升级你的GCC,你的版本太旧了,不支持&lt;atomic&gt;
  • atomic 是在较新版本的 C++ (C++11) 中引入的。你的 g++ 是在 atomic 发明之前编写的!
  • 看来您正在运行 RHEL 5。这是 2007 年发布的,使其非常过时 - GCC 4.1.2 也在 2007 年 2 月发布。您需要查看您的升级选项,无论是您的整个发行版还是您的 GCC 和标准库工具链。
  • 最新的gcc是4.7,你有的有点生疏

标签: c++ linux gcc pthreads atomic


【解决方案1】:

您的帖子有点令人困惑,因为您链接到的帖子说 atomic 需要 GCC 4.4,但您希望它可以在 4.1.x 上运行。

您需要至少升级到 GCC 4.4 才能获得 atomic 支持。在 GCC 4.1 中无法启用对 atomic 的支持,但您可以改用 boost::atomic。为了将来参考,this chart 显示了哪个版本的 GCC 支持哪些 C++11 功能。

如果由于某种原因您无法升级 GCC,您也可以尝试完全使用不同的编译器(例如 clang)。

【讨论】:

  • 嗨,我使用 gcc 版本 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC),但仍然出现错误:atomic: No such file or directory,谢谢!
  • @user 你记得用--std=c++11吗?
  • 是的,我试过 -std=c++0x 和 -std=c++11,我的 gcc 只支持 -std=c++0x,都不行,同样的错误!
  • 在 gcc 4.4 发行说明中注意,没有提供 &lt;atomic&gt;,但提供了 &lt;cstdatomic&gt;
【解决方案2】:

This table 跟踪 gcc 实现状态。您的编译器版本还不支持原子。

在任何情况下,您都需要使用 std=c++11(或旧版本中的 c++0x)开关来启用 C++11 功能。

【讨论】:

  • 嗨,我使用 gcc 版本 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC),但仍然出现错误:atomic: No such file or directory,谢谢!
  • 我强烈建议更新到 GCC 的最新版本,即 GCC 4.7;如果您的发行版没有打包最新版本的 GCC,您甚至可能需要从源代码构建它
【解决方案3】:

确实 gcc 4.4 无法为我编译包含 #include &lt;atomic&gt; 的代码。 这发生在编译别人的代码(fasttext)时,所以我宁愿避免将代码更改为#include &lt;cstdatomic&gt;

我升级到 gcc 4.8 并且它工作正常。

如果您使用的是 CentOS 6.8,here is how to upgrade gcc

【讨论】:

    猜你喜欢
    • 2019-08-11
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多