我正在尝试在mac上运行this example:
#include <iostream>
#include <utility>
#include <atomic>
struct A { int a[100]; };
struct B { int x, y; };
int main()
{
std::atomic<A> a;
std::atomic<B> b;
std::cout << std::boolalpha
<< "std::atomic<A> is lock free? "
<< std::atomic_is_lock_free(&a) << '\n'
<< "std::atomic<B> is lock free? "
<< std::atomic_is_lock_free(&b) << '\n';
}但是我得到了这个错误:
Undefined symbols for architecture x86_64:
"___atomic_is_lock_free", referenced from:
std::__1::__atomic_base<main::B, false>::is_lock_free() const volatile in lock_free_main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)this example也是如此。
我注意到,如果我将Struct A更改为只有一个或两个ints,它就会链接。当结果不为真时,看起来它不会链接,但为什么它不链接呢?在我看来像是个虫子。
我发现了一些更老的问题here和here,这让我认为bug现在应该已经解决了。
下面是我的编译器的版本:
$> g++ --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin19.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin发布于 2020-08-08 03:15:27
请改用"is_always_lock_free“。
std::cout << std::boolalpha
<< "std::atomic<A> is lock free? "
<< a.is_always_lock_free << '\n'
<< "std::atomic<B> is lock free? "
<< b.is_always_lock_free << '\n';你可能需要另外定义"__cpp_lib_atomic_is_always_lock_free“,因为它还没有达到标准。
实际问题是,"atomic_is_lock_free“在编译时运行,至少对于Mac平台是这样。)
https://stackoverflow.com/questions/63090529
复制相似问题