私のライブラリのカスタムクラスでstd :: atomicを使用しています。すべてはMSVCで正常に動作しますが、今私はそれはMacOSの上で実行するために取得しようとしていることを、私は、リンカエラーを取得:アーキテクチャx86_64版のためstd :: atomic with custom class(C++ 11)
未定義のシンボル: 「__atomic_store」から参照:メインで _main。 O
私は、この例では、あまり意味がありませんが、それは私が思い付くことができ、最短のです。もちろん、この
#include <iostream>
#include <atomic>
using namespace std;
class Vec {
public:
int x, y, z;
Vec() { x = y = z = 0; }
};
std::atomic<Vec> x;
int main()
{
Vec a;
x = a;
cin.get();
return 0;
}
を複製するために、いくつかのテストコードを作成しました。それはVS2012で動作しますが、xcodeでは動作しません(上記のリンカエラーが表示されます)。
何が起こっているのですか?私はstd :: atomicを乱用していますか?私が取り組んでいるライブラリは、マルチスレッド化されており、オーディオ処理に使用されています。だから私は正しい方法でstd :: atomicを使用していない場合は、実際には表示されていない、パフォーマンスが非常に良いと私はそれにどのようなスレッドの問題がないため。それとも、xcodeに何か不足しているのでしょうか?
更新:
すべての3つの答えは有用であるが、それは、ほとんどの情報を持っているので、私はアンドレイの答えをチェックしました。私はこれについて専門家はいませんが(明らかに)、VS2012はC++ 11で実装されるべきものを超えているようです。
ここからどうやって行くのですか?いくつかのオプションがあります。
- このクラスの原子を使用しないでください。私のベクトルクラスはコード全体に使用されているので、これは非常に難しいでしょう。ミューテックスをロックしたりアンロックしたりすると、おそらく遅くなるでしょう。
- アトミックに関数を実装します。それは私には非常に複雑に見えます。私は最後のオプションとして保存します。
- boost :: atomicで何かできるかどうか確認してください。一見するとこれはうまくいくようです。私はそれについてより多くのテストをしなければならない。あなたは打ち鳴らすのコンパイラ設定にプロジェクトページで使用している標準ライブラリ
単純にサポートされていない可能性があります。 – GManNickG