簡體   English   中英

為什么 atomic_is_lock_free 在 mac 上不能正確鏈接?

[英]Why doesn't atomic_is_lock_free link correctly on mac?

我正在嘗試在 mac 上運行此示例

#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)

這個例子也是一樣的。

我注意到如果我將Struct A更改為只有一兩個int ,它確實會鏈接。 結果不正確時似乎不會鏈接,但為什么不鏈接? 對我來說似乎是一個錯誤。

我在這里這里發現了一些較老的問題,這讓我認為這個錯誤現在應該已經解決了。

以下是我的編譯器版本:

 $> 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

請改用“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 平台)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM