6

我遇到这个编译器错误

函数 std::atomic::is_lock_free() 常量:错误:未定义的引用
到“__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;
4

1 回答 1

11

GCC 4.7 中的原子 API 不完整:

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

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

于 2013-03-04T15:07:36.797 回答