首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual 2012编译器在Linux上的选择?

Visual 2012编译器在Linux上的选择?
EN

Stack Overflow用户
提问于 2014-07-01 12:04:48
回答 2查看 226关注 0票数 1

几天前,我转到Linux上,现在我正忙于移植我的项目。出于某种原因,无论我使用的是clang++还是gcc 4.8,编译器都抱怨使用带有GLM矢量的原子(类似于atomic<glm::vec3>)。我试着设置-std=c++11-std=gnu++11,gcc不接受,g++/clang++不关心。我知道这不是我的代码,因为它可以在Windows上使用Visual 2012。

所以现在我的问题是,如果有一个好的替代VS2012编译器,使我的代码开始工作?我也想试试gcc 4.9,但是我真的不知道怎么得到它。

clang错误消息:

代码语言:javascript
复制
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/atomic|166|error: exception specification of explicitly defaulted default constructor does not match the calculated one|

g++错误消息:

代码语言:javascript
复制
/usr/include/c++/4.8/atomic|167|error: function ‘std::atomic<_Tp>::atomic() [with _Tp = glm::detail::tvec3<float>]’ defaulted on its first declaration with an exception-specification that differs from the implicit declaration ‘std::atomic<glm::detail::tvec3<float> >::atomic()’|
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-01 16:45:55

glm::vec3tvec<float, T>某些专门化的类型。tvec有一个用户提供的赋值操作符,所以它不能被复制,因此不能与std::atomic一起使用。代码使用VS2012编译,因为微软的标准库实现不能诊断非TriviallyCopyable Tstd::atomic<T>实例化。与任何未定义的行为一样,它编译的事实并不意味着它可以工作。

票数 3
EN

Stack Overflow用户

发布于 2014-07-01 12:32:14

代码语言:javascript
复制
std::atomic<glm::vec3> // sizeof(...) == 12

这种专门化并不存在。只有STL提供的bool、整型和指针类型的专门化。要么您必须自己专门化它,要么必须使用另一个解决方案来解决您的特定问题。请注意,std::atomic<glm::vec3>在您的平台上可能不是TriviallyCopyable (因为它的大小可能没有什么可复制的地方)。这意味着,互斥是用来同步这一点的。对于一个向量,我真的很确定,没有办法去复制它。所以你可以用一对向量和互斥来代替。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24509829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档