linux - glWindowPos2i 未在此范围内声明

标签 linux opengl compilation

我正在将 OpenGL 程序迁移到 C++。除了一个库之外,我已经转换了所有库。在我的显示函数中,我有这一行(用于在屏幕上显示文本):

glWindowPos2i(5,5);

当我将程序作为 .c 运行或在 OSX 中作为 .cpp 运行时,效果很好。但我也需要它在 Linux 上编译为 .cpp。当我在那里编译它时,出现以下错误:

错误:“glWindowPos2i”未在此范围内声明

我不知道这是否是一个缺少的库或者发生了什么。有谁知道我需要做什么才能编译这一行?

最佳答案

这是因为 glWindowPos__ (...) 作为扩展开始:GL_ARB_window_pos。它在 1.4 版本中被集成到核心 OpenGL 中。

您很幸运,在 OS X 上拥有开箱即用的支持 OpenGL 2.1/3.2(较新版本)的 OpenGL 实现。在Linux 中,情况则大不相同。您必须使用 GLX API 在运行时加载 glWindowPos__ (...) 函数入口点(因为它们是由显示驱动程序提供的)。

老实说,解决这个问题的最简单方法是集成 GLEW库到您的构建环境中以进行非 OS X 目标构建。您将在 Microsoft Windows 中遇到同样的问题,因为 Windows 仅附带开箱即用的 OpenGL 1.1 库 - 显示驱动程序在运行时扩展它,就像在 Linux 中一样。

GLEW 将负责加载 Windows 和 Linux 上的附带 OpenGL 库未提供的函数入口点,并使整个过程变得轻松。只要记住在 OS X 上构建软件时禁用 GLEW,这是没有必要的,如果您在 OS X 中链接到它,实际上会产生更多问题。

关于linux - glWindowPos2i 未在此范围内声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19108814/

相关文章:

python - Linux中调用系统命令 'history'

linux - Bash - 提高功率时的可变指数

linux - 用于计算已用时间的 Bash 脚本

c - 将目标文件与在具有不同对齐限制的体系结构上编译的结构访问链接

c++ - 编译器会做什么

java - java可以预编译吗?

Python - 文件名中的空格

c - 提供相对路径时加载纹理将不起作用

opengl - 为什么我的漫反射/镜面照明不起作用?

macos - 体系结构 x86_64 : "_glBegin" 的 undefined symbol