is_lock_free没有在gcc 4.7.2中的std :: atomic <T>中定义?

Der*_*rek 5 c++ gcc atomic c++11

我遇到这个编译错误

function std::atomic::is_lock_free() const: error: undefined reference 
to '__atomic_is_lock_free' 

在Linux上使用gcc 4.7.2编译代码如下所示.

struct S {
  int a;
  int b;
};


  std::atomic<S> s;
  cout << s.is_lock_free() << endl;
Run Code Online (Sandbox Code Playgroud)

Zet*_*eta 11

GCC 4.7中的Atomic API不完整:

  • 当无锁指令不可用时(通过硬件或OS支持),原子操作留作函数调用以由库解析.由于时间限制和API尚未最终确定,因此没有GCC 4.7提供的libatomic.这很容易通过遇到不满意的外部符号来确定__atomic_*.

由于libatomicGCC 4.7 没有附带,您需要使用另一个实际支持您想要的功能的编译器或提供缺少的功能(示例实现).

  • 好吧,gcc的人在一个文件中提供了一个libatomic的示例实现,只在你引用的一个链接下面的一个段落中:http://gcc.gnu.org/wiki/Atomic/GCCMM?action = AttachFile&do = view&target = target libatomic.c它可以编译并链接到无法用gcc4.7编译的程序.(不知道这种实现有多么高效或正确.) (6认同)