OpenGL、GLUT、Cygwin - 无法打开显示“”
Posted
技术标签:
【中文标题】OpenGL、GLUT、Cygwin - 无法打开显示“”【英文标题】:OpenGL, GLUT, Cygwin - failed to open display '' 【发布时间】:2015-04-12 22:37:39 【问题描述】:我的“CMakeList.txt”文件
cmake_minimum_required(VERSION 3.1)
project(butler)
#########################################################
# FIND GLUT
#########################################################
find_package(GLUT REQUIRED)
include_directories($GLUT_INCLUDE_DIRS)
link_directories($GLUT_LIBRARY_DIRS)
add_definitions($GLUT_DEFINITIONS)
if(NOT GLUT_FOUND)
message(ERROR " GLUT not found!")
endif(NOT GLUT_FOUND)
#########################################################
# FIND OPENGL
#########################################################
find_package(OpenGL REQUIRED)
include_directories($OpenGL_INCLUDE_DIRS)
link_directories($OpenGL_LIBRARY_DIRS)
add_definitions($OpenGL_DEFINITIONS)
if(NOT OPENGL_FOUND)
message(ERROR " OPENGL not found!")
endif(NOT OPENGL_FOUND)
set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -std=c++11")
set(SOURCE_FILES main.cpp)
add_executable(butler $SOURCE_FILES)
target_link_libraries(butler $OPENGL_LIBRARIES $GLUT_LIBRARY )
还有一些来自互联网的例子:
#include <windows.h>
#include <cstdlib>
#include "GL/glut.h"
float clr = 0.2;
void display()
glClear(GL_COLOR_BUFFER_BIT);
clr += 0.1;
if (clr > 1.0)
clr = 0;
glBegin(GL_POLYGON);
glColor3f(clr, clr, clr);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
glFlush();
// Main execution function
int main(int argc, char *argv[])
glutInit(&argc, argv); // Initialize GLUT
glutCreateWindow("win1"); // Create a window 1
glutDisplayFunc(display); // Register display callback
glutCreateWindow("win2"); // Create a window 2
glutDisplayFunc(display); // Register display callback
glutMainLoop(); // Enter main event loop
我有错误:“freeglut (/some/path/to/Debug/butler): failed to open display ''”。我尝试使用 ':0.0' 值添加 DISPLAY 变量,但出现错误“freeglut (/some/path/to/Debug/butler): failed to open display ':0.0'”
【问题讨论】:
听起来你没有运行 X 服务器,或者它运行的不是 ":0.0"。 我可以在没有 X 服务器的情况下运行这个程序吗?我不完全理解什么是“X 服务器”。前段时间我在 VisualStudio2010 中编写了相同的代码,它工作正常。现在我安装了 CLion + Cygwin 并开始了“有趣的轮播”。 【参考方案1】:使用 Cygwin 编译程序时,您会得到一个“unix-ish”类型的环境。图形由客户端连接到一端的 X 服务器完成,图形驱动程序连接到另一端; Cygwin X 服务器使用 Windows GDI(和一个非常基线的 OpenGL 配置文件)作为其后端。错误 get 是程序告诉您,它希望能够连接到 X 服务器,但找不到。
当涉及到 Windows 上的 OpenGL 时,你不应该使用它!
在构建使用 OpenGL 的程序时: 不要使用 Cygwin 工具链!
改为使用针对本机 Windows 图形 API 的 MinGW 工具链;您还需要相关库的适当构建。您可以在 Cygwin 环境中安装 MinGW 工具链,但我个人更喜欢独立安装。
【讨论】:
【参考方案2】:如果您的首要任务只是让它在编译后运行,而不考虑性能、兼容性或可移植性,您可以运行:
startxwin /some/path/to/Debug/butler
在 Cygwin 终端中(假设您安装了 xinit
Cygwin 软件包,per the documentation)。
这会以“多窗口”模式启动 X 服务器并运行您的程序。一旦您的程序退出,它将停止 X 服务器并进行清理。
【讨论】:
以上是关于OpenGL、GLUT、Cygwin - 无法打开显示“”的主要内容,如果未能解决你的问题,请参考以下文章