我正在使用std ::原子与我的库中的自定义类。所有的正常工作与MSVC,但现在,我试图让它在MacOS运行,我得到一个链接错误:std ::原子与自定义类(C++ 11)
用于建筑x86_64的未定义符号: “__atomic_store”,从引用:在主 _main。 Ø
我已经创造了一些测试代码复制此
#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可能缺乏什么?
更新:
我检查了安德烈的答案,因为它拥有最多的信息,尽管所有三个答案都是有用的。我不是这方面的专家(显然),但似乎VS2012超越了C++ 11应该实现的东西。
那么该怎么走?我看到几个选项。
- 不要对此类使用原子。在我的具体情况下,这将是非常困难的,因为我的矢量类被用在整个代码中。锁定和解锁互斥锁可能会使事情减慢很多。
- 自己实现原子的功能。这对我来说看起来很复杂。我将它保存为最后一个选项。
- 看看boost :: atomic可以做些什么。这似乎乍一看起来很有效。尽管如此,我仍然需要做更多的测试。
它可能根本不支持。 – GManNickG 2013-04-08 22:47:25