我遇到这个编译错误
<>之前函数std::atomic::is_lock_free() const: error:未定义引用"__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;
原子API在GCC 4.7中不完整:
- 当无锁指令不可用时(无论是通过硬件还是操作系统支持),原子操作将作为函数调用留给库来解析。由于时间限制和一个尚未最终确定的API, GCC 4.7没有提供libatom。这很容易通过遇到以
__atomic_*
开头的不满意的外部符号来确定。
由于GCC 4.7没有附带libatomic
,您需要使用另一个真正支持您想要的功能或提供缺失功能(示例实现)的编译器。