2016-12-25 41 views
1

根據C++標準,std::atomic可與任何可複製類型組合使用。但是,GCC會產生以下錯誤消息:GCC中可複製類型的原子對象

#include <atomic> 
struct TriviallyCopyableType { 
    int a, b, c, d; 
}; 
int main() { 
    std::atomic<TriviallyCopyableType> a; 
    a.store({});  // undefined reference to `__atomic_store_16' 
    a.is_lock_free(); // undefined reference to `__atomic_is_lock_free' 
} 

Clang和Microsoft的編譯器不會抱怨。難道我做錯了什麼?這是一個已知的問題嗎?畢竟,GCC 4.4在幾年前實施了原子操作。除了使用不同的編譯器之外,是否有任何解決方法?由於Clang實現了無鎖的std::atomic<TriviallyCopyableType>,我不想使用顯式鎖定。

+3

罰款上gcc 6.3。我認爲你需要一個更新的編譯器。你的古老。 –

+0

那麼,我不會叫5.4古... – user1494080

+3

看來[這個答案](http://stackoverflow.com/a/15204653/1120273)仍然是相關的。可能你需要包含'-latomic'。 –

回答

1

這個答案是從評論編譯。

您需要通過在命令行上指定-latomic將原子操作庫與程序明確關聯。

-mcx16可以對128位數據類型啓用無鎖定原子操作。