我遇到这个编译器错误
函数 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;
- 当无锁指令不可用(通过硬件或操作系统支持)时,原子操作将作为函数调用留给库来解决。由于时间限制和未最终确定的 API,GCC 4.7 没有提供 libatomic。这很容易通过遇到以 开头的不满意的外部符号来确定
__atomic_*
。
由于没有libatomic
附带 GCC 4.7,您需要使用另一个编译器,它实际上支持您想要的功能或提供缺少的功能(示例实现)。