Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

SDL2を使ってWindowが生成できない(WSL2のUbuntu20.04)

解決したいこと

WSL2のUbuntu20.04.3でSDL2を使いたいです。
ウインドウが生成できないのですが、原因が知りたいです。

発生している問題・エラー

ウィンドウを生成できなかった: No available video device

該当するソースコード

SDL_CreateWindow からコピーしたコードを使いました。

sample.c
// サンプルプログラム:
// SDL2でアプリケーションウィンドウを生成する

#include "SDL.h"
#include <stdio.h>

int main(int argc, char* argv[]) {

    SDL_Window *window;                    // ポインタを宣言する

    SDL_Init(SDL_INIT_VIDEO);              // SDL2を初期化する

    // 次の設定でアプリケーションウィンドウを生成する:
    window = SDL_CreateWindow(
        "An SDL2 window",                  // ウィンドウのタイトル
        SDL_WINDOWPOS_UNDEFINED,           // X座標の初期値
        SDL_WINDOWPOS_UNDEFINED,           // Y座標の初期値
        640,                               // 幅のピクセル数
        480,                               // 高さのピクセル数
        SDL_WINDOW_OPENGL                  // フラグ
    );

    // ウィンドウの生成に成功したかチェックする
    if (window == NULL) {
        // ここを通ったならばウィンドウを生成できなかった...
        printf("ウィンドウを生成できなかった: %s\n", SDL_GetError());
        return 1;
    }

    // ウィンドウが開いた: ここでプログラムループに入る (SDL_PollEvent()を参照すること)

    SDL_Delay(3000);  // 例として3000ミリ秒間停止する

    // ウィンドウを閉じて破棄する
    SDL_DestroyWindow(window);

    // 終了処理
    SDL_Quit();
    return 0;
}

コンパイルと実行のコマンド

$ gcc -g -o sample sample.c `sdl2-config --cflags --libs`
$ ./sample

インストール時のコマンド

SDL2.0をUbuntuにインストールするを参考にSDL2をインストールしました。

$ sudo apt-get install mercurial
$ hg clone https://hg.libsdl.org/SDL SDL
$ cd SDL
$ mkdir build
$ cd build
$ ../configure
$ sudo apt install make
$ make
$ sudo make install

自分で試したこと(1)

SDL1.2を消すためにUbuntuを初期化しました。(参考サイト

自分で試したこと(2)

別のサンプルプログラムを使ってみました(参考サイト

コンパイルのコマンド

 gcc -g -o sample04 sample04.c `sdl2-config --cflags --libs`

サンプルコード

sample04.c
#include <SDL2/SDL.h>
#include <stdio.h>

const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;

int main( int argc, char* args[] ) {

    SDL_Window* window = NULL;
    SDL_Renderer *renderer = NULL;

    //Initialize SDL
    if( SDL_Init( SDL_INIT_VIDEO ) < 0 ) {
        printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
    } else {
        //Create window
        window = SDL_CreateWindow( "Hello SDL", SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT,SDL_WINDOW_OPENGL);

        if( window == NULL ) {
            printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
        } else {

            renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);

            SDL_RenderClear(renderer);
            SDL_RenderPresent(renderer);

            SDL_Delay(3000);
        }
    }

    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);

    SDL_Quit();

    return 0;
}

発生している問題・エラー

別のエラーが出ました

SDL could not initialize! SDL_Error: No available video device                               

自分で試したこと(3)

X Windows System をダウンロードし、xeyesを起動して動作確認しました(参考サイト

$ sudo apt-get -y install xserver-xorg
$ sudo apt-get -y install x11-apps
$ xeyes

目は表示されませんでした……

考えていること

環境変数が設定されてないのが問題なのだろうと思っています。
WSL2:Linuxで環境変数を設定する方法が良くわかりません。
WSL1にダウングレードした方がいい気がしてきました。

参考サイトリスト

Windows10でWSL環境を初期化(リセット)する方法
SDL2.0をUbuntuにインストールする
SDL_CreateWindow
ゲームを作るための環境設定
Ubuntu 20.04 LTS に後から GUI (X Window System) を追加する

0

2Answer

Comments

  1. @anne_daigaku

    Questioner

    入れてないです…入れてみます!ありがとうございます。

Your answer might help someone💌