我使用的std ::原子在我的库中的自定义类。 所有的正常工作与MSVC,但现在,我试图让它在MacOS运行,我得到一个链接错误:
对于建筑x86_64的未定义的符号:“__atomic_store”,从引用:_main在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 ::原子在这里? 我工作的图书馆是严重的多线程和用于音频处理。 所以,如果我不使用的std ::原子以正确的方式,它是不是真的有显示,因为性能非常好,我没有任何与它的线程问题。 或者Xcode的也许缺了点什么?
更新:
我检查了安德烈的答案,因为它拥有最多的信息,尽管所有三个答案都是有用的。 我在这个(显然)不是专家,但似乎VS2012已经超出了应在C ++ 11中实现。
因此,如何从这里走? 我看到几个选项。
- 不要该类使用原子。 在我的具体情况,因为我的矢量类是用于各地的代码,这将是非常困难。 锁定和解锁互斥可能会慢下来很多。
- 实现自己的功能用于原子。 这看起来很复杂我。 我将它保存为最后一个选项。
- 看看是否有可以使用的boost ::原子来完成。 这似乎乍一看工作。 我必须这样做就可以了更多的测试,但。