SDL2を使ってWindowが生成できない(WSL2のUbuntu20.04)
Q&A
Closed
解決したいこと
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