Ubuntu 12.04 システムで、次のコードをコンパイルしようとすると:
#include <atomic>
int a;
int main()
{
a = 0;
std::atomic_thread_fence(std::memory_order_acquire);
a = 1;
}
次のようなエラー メッセージが表示されます。
g++ test.cpp -std=c++0x
/tmp/ccayKntC.o: In function `main': test.cpp:(.text+0x14): undefined reference to `std::atomic_thread_fence(std::memory_order)' collect2: ld returned 1 exit status
これは、コンパイル時にclang++
も発生します。これはリンカー エラーであるため、私のバージョンの libstdc++ には必要な機能が欠けていると思います。ただし、他のアトミック操作は機能しているようです。
Ubuntu 12.04 を使用しています。システムのセットアップに問題があるのか、それが libstdc++ にない機能なのか、それとも何か他のものなのか、疑問に思っています。そして理想的には、問題を解決できるようになりたいと思っています。