8

次のコードはリンクに失敗します:

#include <atomic>                                                                                                                                                             
struct A
{
    unsigned long a;
    unsigned long b;
};                                                                                                                                                           
struct B
{
    void set(A tmp)
    {
        _a.store(tmp);
    }
    std::atomic<A> _a;
 };                                                                                                                                                           

 int main()
{
   B b;
   b.set(A());
   return  0;
}

次のエラーが発生します。

/tmp/cc8gyaZM.o: In function `std::atomic<A>::store(A, std::memory_order)':
dryn.cpp:     (.text._ZNSt6atomicI1AE5storeES0_St12memory_order[_ZNSt6atomicI1AE5storeES0_St12memory_order]+0x3e): undefined reference to `__atomic_store_16'

unsigned long-s を int までのサイズのものに置き換えると、問題なくコンパイルされます。g++ 4.7.2 を使用。それがなぜなのか分かりますか?

コマンドでコンパイル:

g++ dryn.cpp --std=c++11
4

1 に答える 1