【问题标题】:Function 'glWindowPos2i' could not be resolved?函数“glWindowPos2i”无法解析?
【发布时间】:2013-09-20 05:19:14
【问题描述】:

在尝试编译一个简单的 openGL 示例以显示文本时,我遇到了“glWindowPos2i”无法解决的问题。 glWindowPos2i 似乎在 GCC 下作为 C 程序编译得很好,但是在 eclipse 下作为带有 g++ 的 c++ 程序时出现无法解决的错误。 (下面的解决方案)

环境是ubuntu 13.04下的eclipse(juno),openGL 3.3.0(NVIDIA 310.44)GLEW version 1.8.0

【问题讨论】:

    标签: c++ eclipse opengl gcc glew


    【解决方案1】:

    问题在于 glWindowPos2i 是一个扩展,为了使用 c++ 编译,glWindowPos2i 需要由其地址定义。在程序的顶部,就在包含 glWindowPos2i 之后,需要将其定义为全局。

    PFNGLWINDOWPOS2IPROC glWindowPos2i;
    

    然后在程序体中,在glutInit之后,需要给全局变量赋值。

    glWindowPos2i =  (PFNGLWINDOWPOS2IPROC) glutGetProcAddress("glWindowPos2i");
    

    glutGetProcAddress 由包含定义,PFNGLWINDOWPOS2IPROC 的定义来自

    我正在使用的包含的完整列表是

    #include <GL/glew.h>
    #include <GL/glext.h>
    #include <GL/freeglut.h>
    #include <GL/freeglut_ext.h>
    

    我正在使用的链接器包括

    -lGL -lm -lglut -lGLEW -lGLU
    

    【讨论】:

    • 您正在使用 GLEW,但它没有加载此扩展程序?如果是这种情况,我认为手头会有更大的问题,因为我记得这个扩展已经有 11 年了。
    • 请注意,如果您使用的是核心配置文件上下文,则此功能在技术上是无效的。可能是因为你的驱动程序没有在扩展列表中提供这个,但无论出于何种原因,如果你得到函数指针,它仍然会给你一个。
    • 这让我大吃一惊,但经过 2 天的尝试让它发挥作用,我想我应该分享我的解决方案。如果有更好的,我肯定想知道。当我执行“glewinfo”时,我得到一个“glWindowPos2i:OK”。如果我重新启动 Eclipse,程序会编译,但只有在遇到带有 0x0 的 glWindowPos2i 时才会崩溃。如果没有修复并删除 -lGLEW,我会得到一个未定义的对 `__glewWindowPos2i' 的引用,因此链接器会看到该链接但无法解析它。
    • 您使用的是核心配置文件上下文吗?我不得不想象扩展字符串在运行时没有显示,因为您使用的是 OpenGL 3.2 核心而不是 OpenGL 3.2 兼容性。
    • 我猜是使用核心上下文。我尝试添加 glutInitContextVersion (3, 3);和 glutInitContextFlags (GLUT_COMPATIBILITY_PROFILE );,但错误仍然存​​在,程序在 glWindowPos2i 调用时以 0x0 崩溃。
    猜你喜欢
    • 2012-07-25
    • 2012-11-27
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 2015-05-05
    • 2017-02-28
    • 2016-09-18
    • 1970-01-01
    相关资源
    最近更新 更多