【发布时间】:2018-09-23 19:19:28
【问题描述】:
以前,对于 Apple LLVM 9.1.0,128 位结构上的 is_lock_free() 已返回 true。为了获得完整的std::optional 支持,我随后升级到了 MacPorts gcc 7.3。在我第一次尝试编译时,我遇到了这个臭名昭著的 showstopper 链接器错误:
Undefined symbols for architecture x86_64:
"___atomic_compare_exchange_16", referenced from:
我知道我可能需要添加-latomic。使用 Apple LLVM 9.1.0,我不需要它,对此我有一种非常糟糕的感觉。如果它是无锁的,您通常不需要链接到任何其他库,仅编译器就能够处理它。否则,它可能只是基于锁的,需要其他库的支持。正如我所担心的,在添加-latomic 后,构建成功,但is_lock_free() 返回false。
我确实认为 gcc 7.3 及其标准库的实现很好。这可能只是我这边的一些配置问题。事实上,我没有做任何配置。我只是安装了 MacPorts gcc 并完成了。知道我可能缺少什么吗?
【问题讨论】:
标签: c++ gcc atomic lock-free gcc7