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.hヘッダーと を含める必要がありますstdlib.h

于 2013-08-18T23:19:59.323 に答える
1

実際、Eclipse は私のプログラムに環境変数をまったく渡していませんでした (開始してくれた datenwolf に感謝します)。プログラムに渡す環境変数を選択するには、[実行構成] に移動し、[C/C++ アプリケーション] で適切な起動構成を選択し (私はデフォルトのものしか持っていませんでした)、[環境] タブを開き、選択ボタン (使用可能なすべての環境変数がリストされます)、必要なものを選択します。

于 2013-08-18T23:34:37.260 に答える