C++ g+中的GLM与原子+;4.8

C++ g+中的GLM与原子+;4.8,c++,linux,gcc,g++,glm-math,C++,Linux,Gcc,G++,Glm Math,几天前我从Windows切换到Linux,到目前为止我非常喜欢它。不幸的是,我在移植我的项目时遇到了问题。在这里,我将GLM用于向量计算和原子计算。在VisualStudio上一切正常 我遇到的第一个问题是,出于某种原因,g++4.6在我包含原子头的时候就给了我一个未定义的引用。然后我切换到g++4.8,问题就解决了。但是现在,当我使用一个原子和这样的向量:atomic,我就遇到了一个新问题。这就是g++所说的: /usr/include/c++/4.8/atomic | 167 |错误:函数“

几天前我从Windows切换到Linux,到目前为止我非常喜欢它。不幸的是,我在移植我的项目时遇到了问题。在这里,我将GLM用于向量计算和原子计算。在VisualStudio上一切正常

我遇到的第一个问题是,出于某种原因,g++4.6在我包含
原子
头的时候就给了我一个
未定义的引用
。然后我切换到g++4.8,问题就解决了。但是现在,当我使用一个原子和这样的向量:
atomic
,我就遇到了一个新问题。这就是g++所说的:

/usr/include/c++/4.8/atomic | 167 |错误:函数“std::atomic::atomic()[with _Tp=glm::detail::tvec3]”在其第一个声明中默认设置,其异常规范与隐式声明“std::atomic::atomic()”不同。

我不知道如何解决这个问题。我想尝试g++4.9,但我甚至不知道如何获得它。下面是一个在我的机器上崩溃的简单代码:

#include <iostream>
#include <glm.hpp>
#include <atomic>

using namespace std;
using namespace glm;

atomic<vec3> b;
int main(){
    cout << "hello" << endl;

    return 0;
}
#包括
#包括
#包括
使用名称空间std;
使用名称空间glm;
原子b;
int main(){
cout看起来似乎
tvec3
不适合制作电影。
您需要检查
tvec3
是否实际满足概念中给出的所有约束:

要求

  • 平凡复制构造函数
  • 平凡移动构造函数
  • 平凡复制赋值算子
  • 平凡移动赋值算子
  • 平凡析构函数
  • 没有虚拟函数或虚拟基类
  • 所有(非静态)成员和基类都是可复制的

否则,请使用单独的版本来保护容器不受并发访问。

我也这么认为,但它在Visual Studio上起作用。是的,我后来在重读这个问题时也意识到了这一点。您使用的是哪个VS版本?可能是GCC 4.8中的一个错误,它还没有完成c++11功能。尝试GCC 4.9听起来是个好主意。对于clang it soun来说ds您丢失了
-std=c++11
选项。我使用的是VS2012。我还认为这可能是一个错误,但我找不到gcc 4.9。我试图用clang设置
-std=c++11
,我得到了一个新错误。在“atomic_base.h”中的某个地方,clang说:
/usr/include/c++/4.6/bits/atomic_base.h | 167 |错误:没有名为“"的模板CyBase',你是说“C++原子::α原子基”?<代码>刚才看到CLAN使用C++的4.6个库。我试着把它设置到4.8个库。