Linux上的原子存储编译问题

时间:2019-05-17 03:10:14

标签: c++ c++11 stdatomic

代码

#include <memory>
#include <thread>
#include <chrono>
#include <atomic>
#include <iostream>
#include <map>
using namespace std;

static shared_ptr<multimap<string,int> > m1;
//static atomic<shared_ptr<multimap<string,int> > > m3;
int main()
{
     multimap<string,int> m2;
     m2.insert(make_pair("1",1));
     //m3.store(std::make_shared<multimap<string,int> >(m2),std::memory_order_relaxed);
     atomic_store(&m1, std::make_shared<multimap<string,int> >(m2));
}

在Mac上使用gcc -dumpversion = 4.2.1可以正常工作,在Linux上为4.8.5,甚至无法编译,将其更改为注释行后,语法编译失败就消失了,但是生成了

/tmp/ccM6frcE.o: In function `std::atomic<std::shared_ptr<std::multimap<std::string, int, std::less<std::string>, std::allocator<std::pair<std::string const, int> > > > >::store(std::shared_ptr<std::multimap<std::string, int, std::less<std::string>, std::allocator<std::pair<std::string const, int> > > >, std::memory_order)':
tt.cpp:(.text._ZNSt6atomicISt10shared_ptrISt8multimapISsiSt4lessISsESaISt4pairIKSsiEEEEE5storeES9_St12memory_order[_ZNSt6atomicISt10shared_ptrISt8multimapISsiSt4lessISsESaISt4pairIKSsiEEEEE5storeES9_St12memory_order]+0x3a): undefined reference to `__atomic_store_16'
collect2: error: ld returned 1 exit status

是否存在未解决的符号/功能问题?

在Linux上像这样编译它

g++ --std=c++11 tt.cpp 

0 个答案:

没有答案