我遇到了这个编译器错误
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;
答案 0 :(得分:10)
Atomic API isn't complete in GCC 4.7:
- 当无锁指令不可用时(通过硬件或OS支持),原子操作留作函数调用以由库解析。 由于时间限制和API尚未最终确定,GCC 4.7没有提供libatomic。这可以通过遇到以
__atomic_*
开头的未满足的外部符号来轻松确定。
由于GCC 4.7附带libatomic
,您需要使用另一个实际支持您想要的功能的编译器或提供缺少的功能(sample implementation)。