0

我在 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)并从那里手动启动就可以了。

任何人都知道问题可能是什么?

4

2 回答 2

2

在我看来,Eclipse 在启动程序时会清除所有或部分环境变量。环境变量DISPLAY告诉程序如何连接到 X11 服务器。没有这些信息,它就无法打开显示,给你这个错误。

简单的测试来验证这一点:像之前一样添加以下内容glfwInit()(不要介意这不是 C++ 并且不使用 iostream,但这对于快速测试来说是可以的:

fprintf(stderr, "DISPLAY=%s\n", getenv("DISPLAY"));

您必须包括标题stdio.hstdlib.h.

于 2013-08-18T23:19:59.323 回答
1

Eclipse 确实没有将任何环境变量传递给我的程序(感谢 datenwolf 让我开始)。可以通过以下方式选择将哪些环境变量传递给程序:运行配置,在“C/C++ 应用程序”下选择适当的启动配置(我只有默认配置),打开环境选项卡,然后点击选择按钮(它列出了所有可用的环境变量)并选择你想要的。

于 2013-08-18T23:34:37.260 回答