このコンパイラ エラーが発生します
関数 std::atomic::is_lock_free() const: エラー: 未定義の参照 「__atomic_is_lock_free」へ
Linuxでgcc 4.7.2を使用して以下のようなコードをコンパイルする場合。
struct S {
int a;
int b;
};
std::atomic<S> s;
cout << s.is_lock_free() << endl;
Atomic API は GCC 4.7 では完全ではありません:
- (ハードウェアまたは OS サポートのいずれかを介して) ロックフリー命令が利用できない場合、アトミック操作は、ライブラリによって解決される関数呼び出しとして残されます。時間の制約と最終化されていない API のため、GCC 4.7 で提供される libatomic はありません。これは、 で始まる満たされていない外部シンボルに遭遇することで簡単に判断でき
__atomic_*
ます。
libatomic
GCC 4.7には同梱されていないため、必要な機能を実際にサポートするか、不足している機能を提供する別のコンパイラを使用する必要があります(サンプル実装)。