我在Eclipse中有一个简单的OpenGL / GLFW测试程序
#include <iostream>
#include <string>
#include <GL/glew.h>
#define GLFW_INCLUDE_GLU
#include <GLFW/glfw3.h>
void errorCallback(int error, const char *description)
{
std::cerr << description << " (GLFW error " << error << ")" << std::endl;
}
int main(int argc, char **argv)
{
int returnValue = 0;
try {
// Initialise GLFW.
glfwSetErrorCallback(errorCallback);
if(!glfwInit()) throw std::string("Could not initialise GLFW");
/* ...do everything else... */
} catch(std::string const &str) {
std::cerr << "Error: " << str << std::endl;
returnValue = 1;
}
return returnValue
}
但是,运行它会导致以下内容出现在控制台中:
X11: Failed to open X display (GLFW error 65542)
Error: Could not initialise GLFW
即。它在glfwInit()
期间失败了(我注释掉所有代码只是为了确保它在窗口创建期间实际上不会发生或其他什么)。但是,导航到构建目录(使用我的文件管理器,而不是Eclipse),并从那里手动启动就可以了。
任何人都知道问题可能是什么?
答案 0 :(得分:2)
听起来像Eclipse在启动程序时会清除所有或部分环境变量。环境变量DISPLAY
告诉程序如何连接到X11服务器。如果没有该信息,则无法打开显示屏,从而导致错误。
验证这一点的简单测试:在glfwInit()
之前添加以下内容(更不用说这不是C ++并且不使用iostream,但是可以快速测试:
fprintf(stderr, "DISPLAY=%s\n", getenv("DISPLAY"));
您必须包含标题stdio.h
和stdlib.h
。
答案 1 :(得分:1)
Eclipse确实没有将任何环境变量传递给我的程序(感谢datenwolf让我开始)。通过转到“运行配置”,选择“C / C ++应用程序”下的相应启动配置(我只有默认值),打开环境选项卡,然后点击选择按钮,可以选择要传递给程序的环境变量(它列出了所有可用的环境变量)并选择了你想要的那些。