GLM无法使用g ++ / C ++ 11进行编译 [英] GLM fails to compile with g++/C++11

查看:179
本文介绍了GLM无法使用g ++ / C ++ 11进行编译的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将 GLM 用于游戏项目,但是当使用g ++和-std = c ++ 11进行编译时,我会遇到很多编译错误。

I'm trying to use GLM for a game project, but when compiling with g++ and -std=c++11, I'm getting a lot of compile errors.

这是我要编译的代码: (摘自此处

This is the code I'm trying to compile: (taken from here)

#include "glm/vec3.hpp"
#include "glm/gtx/io.hpp"
#include <iostream>

using namespace std;
using glm::vec3;

int main () {
    vec3 i_am_zero;

    cout << i_am_zero << endl;
    return 0;
}

我的命令行:

g++ -std=c++11 test.cpp -o test.exe

编译器输出:

In file included from glm/gtx/../detail/func_trigonometric.hpp:205:0,
                 from glm/gtx/../trigonometric.hpp:35,
                 from glm/gtx/../glm.hpp:110,
                 from glm/gtx/io.hpp:50,
                 from glmtest.cpp:2:
glm/gtx/../detail/func_trigonometric.inl:166:14: error: 'std::asinh' has not been declared
   using std::asinh;
              ^
In file included from glm/gtx/../detail/func_trigonometric.hpp:205:0,
                 from glm/gtx/../trigonometric.hpp:35,
                 from glm/gtx/../glm.hpp:110,
                 from glm/gtx/io.hpp:50,
                 from glmtest.cpp:2:
glm/gtx/../detail/func_trigonometric.inl:185:14: error: 'std::acosh' has not been declared
   using std::acosh;
              ^
glm/gtx/../detail/func_trigonometric.inl:206:14: error: 'std::atanh' has not been declared
   using std::atanh;
              ^
In file included from glm/gtx/../detail/func_exponential.hpp:132:0,
                 from glm/gtx/../exponential.hpp:35,
                 from glm/gtx/../glm.hpp:111,
                 from glm/gtx/io.hpp:50,
                 from glmtest.cpp:2:
glm/gtx/../detail/func_exponential.inl:43:14: error: 'std::log2' has not been declared
   using std::log2;
              ^
In file included from glm/gtx/../detail/func_common.hpp:455:0,
                 from glm/gtx/../common.hpp:35,
                 from glm/gtx/../glm.hpp:112,
                 from glm/gtx/io.hpp:50,
                 from glmtest.cpp:2:
glm/gtx/../detail/func_common.inl:229:16: error: 'std::trunc' has not been declared
   using ::std::trunc;
                ^
glm/gtx/../detail/func_common.inl:248:16: error: 'std::round' has not been declared
   using ::std::round;
                ^
glm/gtx/../detail/func_common.inl: In instantiation of 'vecType<T, P> glm::round(const vecType<T, P>&) [with T = float; glm::precision P = (glm::precision)0u; vecType = glm::tvec2]':
glm/gtx/../detail/func_packing.inl:47:55:   required from here
glm/gtx/../detail/func_common.inl:262:59: error: no matching function for call to 'glm::detail::functor1<float, float, (glm::precision)0u, glm::tvec2>::call(<unresolved overloaded function type>, const glm::tvec2<float, (glm::precision)0u>&)'
   return detail::functor1<T, T, P, vecType>::call(round, x);
                                                           ^
glm/gtx/../detail/func_common.inl:262:59: note: candidate is:
In file included from glm/gtx/../detail/func_trigonometric.inl:33:0,
                 from glm/gtx/../detail/func_trigonometric.hpp:205,
                 from glm/gtx/../trigonometric.hpp:35,
                 from glm/gtx/../glm.hpp:110,
                 from glm/gtx/io.hpp:50,
                 from glmtest.cpp:2:
glm/gtx/../detail/_vectorize.hpp:58:41: note: static glm::tvec2<R, P> glm::detail::functor1<R, T, P, glm::tvec2>::call(R (*)(T), const glm::tvec2<T, P>&) [with R = float; T = float; glm::precision P = (glm::precision)0u]
   GLM_FUNC_QUALIFIER static tvec2<R, P> call(R (*Func) (T x), tvec2<T, P> const & v)
                                         ^
glm/gtx/../detail/_vectorize.hpp:58:41: note:   no known conversion for argument 1 from '<unresolved overloaded function type>' to 'float (*)(float)'
In file included from glm/gtx/../detail/func_common.hpp:455:0,
                 from glm/gtx/../common.hpp:35,
                 from glm/gtx/../glm.hpp:112,
                 from glm/gtx/io.hpp:50,
                 from glmtest.cpp:2:
glm/gtx/../detail/func_common.inl: In instantiation of 'vecType<T, P> glm::round(const vecType<T, P>&) [with T = float; glm::precision P = (glm::precision)0u; vecType = glm::tvec4]':
glm/gtx/../detail/func_packing.inl:105:52:   required from here
glm/gtx/../detail/func_common.inl:262:59: error: no matching function for call to 'glm::detail::functor1<float, float, (glm::precision)0u, glm::tvec4>::call(<unresolved overloaded function type>, const glm::tvec4<float, (glm::precision)0u>&)'
   return detail::functor1<T, T, P, vecType>::call(round, x);
                                                           ^
glm/gtx/../detail/func_common.inl:262:59: note: candidate is:
In file included from glm/gtx/../detail/func_trigonometric.inl:33:0,
                 from glm/gtx/../detail/func_trigonometric.hpp:205,
                 from glm/gtx/../trigonometric.hpp:35,
                 from glm/gtx/../glm.hpp:110,
                 from glm/gtx/io.hpp:50,
                 from glmtest.cpp:2:
glm/gtx/../detail/_vectorize.hpp:76:41: note: static glm::tvec4<R, P> glm::detail::functor1<R, T, P, glm::tvec4>::call(R (*)(T), const glm::tvec4<T, P>&) [with R = float; T = float; glm::precision P = (glm::precision)0u]
   GLM_FUNC_QUALIFIER static tvec4<R, P> call(R (*Func) (T x), tvec4<T, P> const & v)
                                         ^
glm/gtx/../detail/_vectorize.hpp:76:41: note:   no known conversion for argument 1 from '<unresolved overloaded function type>' to 'float (*)(float)'

似乎无法从cmath中找到某些功能-但是,如果在包含glm之前先包含cmath,这些错误仍然存​​在。

It appears that it can't find some functions from cmath - but these errors still remain if I include cmath before I include glm.

任何建议?

推荐答案

看来,这是GLM 0.9.7版的错误。降级到0.9.5为我解决了这个问题。被跟踪为问题405

It appears that this is a bug with GLM version 0.9.7. Downgrading to 0.9.5 resolved the problem for me. It's being tracked as issue 405.

这篇关于GLM无法使用g ++ / C ++ 11进行编译的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆