2

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

#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> 在ubuntu中“没有这样的文件”

g++ 4.4.3 中的 std::atomic 支持

也不行。

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. 

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

4

3 回答 3

6

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

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

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

于 2012-05-28T15:43:14.740 回答
1

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

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

于 2012-05-28T15:43:37.210 回答
1

实际上 gcc 4.4 无法为我编译包含#include <atomic>. 这发生在编译别人的代码(fasttext)时,所以我宁愿避免将代码更改为#include <cstdatomic>.

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

如果您使用的是 CentOS 6.8,这里是如何升级 gcc

于 2017-05-24T12:45:48.823 回答