1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LovyanGFXAdvent Calendar 2022

Day 14

WSL を使って CUI で LovyanGFX for PC を試してみる

Last updated at Posted at 2022-12-18

勉強会で、MS-Windows で VisualStudio をインストールできない人がいたので、代わりの方法として Ubuntu で動かす手順なら WSL でそのまま動くかな? と試してみました。

環境

  • エディション Windows 10 Pro
  • バージョン 21H2
  • OS ビルド 19044.2364

WSL

「WSL2 をインストール」
https://qiita.com/nanbuwks/items/e3db5fe9c03c76a62227
の通りインストール済みです。

SDL2 を使えるようにする

「SDL2 のサンプルプログラムを試す」
https://qiita.com/nanbuwks/items/379013b65fa10ce042a5
の通り試していくと・・・

$ ./sdltest
error: XDG_RUNTIME_DIR not set in the environment.
error: XDG_RUNTIME_DIR not set in the environment.

エラーが出ました。これを防ぐには Xサーバが必要らしいですが・・・

「Linux 用 Windows サブシステムで Linux GUI アプリを実行する」
https://learn.microsoft.com/ja-jp/windows/wsl/tutorials/gui-apps

によると、今どきの WSL だと Linux GUI アプリケーションが使えるようになっているとのこと。

この機能にアクセスするには、ビルド 19044 以降またはWindows 11 Windows 10する必要があります。

とのことですが要件は満たしていますが、WSLは ビルド 19044 より前にインスールしたままなので、WSLのバージョンアップが必要かな?
Power Shell にて

PS C:\Users\WinTest> wsl --update
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム  はインストールされました。

とするとサンプル画像の表示ができました。
image.png

LovyanGFX for PC の用意

develop branch を指定してクローンします。

$ git clone -b develop https://github.com/lovyan03/LovyanGFX.git

作業場所に移動します。

$ cd LovyanGFX/
$ cd examples_for_PC/CMake_SDL/

13日目の記事
「LovyanGFX for PC 完全体を g++ on Ubuntu で」
https://qiita.com/nanbuwks/items/e316398aa12a90576cc7

より、 pc.hpp を作り、保存します。

サンプルプログラムの調整をします。

user_code.cpp の冒頭に、先程作ったファイルを読み込むように記述します。

#include "pc.hpp"

また、ウェイトをかけるのに lgfx::delay を使うようになっていますが pc.hpp の処理と競合するので対処します。今回は単純にコメントアウトしました。

//  lgfx::delay(1);

ビルド

以下のようにエラーが出ました

$ g++ -o test user_code.cpp LGFX_SDL.cpp ../../../LovyanGFX
/src/lgfx/utility/*.c ../../../LovyanGFX/src/lgfx/v1/*.cpp ../../../LovyanGFX/src/lgfx/v1/misc/*.cpp  ../../../LovyanGFX
/src/lgfx/v1/panel/Panel_Device.cpp ../../../LovyanGFX/src/lgfx/v1/platforms/sdl/*.cpp  -lm -lSDL2  -lSDL2_image -I../..
/../LovyanGFX/src -I../../../LovyanGFX/src/lgfx/v1  -L../../../LovyanGFX/src/lgfx -DLGFX_SDL
../../../LovyanGFX/src/lgfx/utility/lgfx_qoi.c: In function ‘size_t lgfx_qoi_encode(const void*, const qoi_desc_t*, int, lgfx_qoi_encoder_get_row_func, lfgx_qoi_writer_func, void*)’:
../../../LovyanGFX/src/lgfx/utility/lgfx_qoi.c:335:19: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘size_t’ {aka ‘long unsigned int’} [-Wformat=]
  335 |     debug_printf( "Can't malloc %d bytes", writeBufferSize);
      |                   ^~~~~~~~~~~~~~~~~~~~~~~  ~~~~~~~~~~~~~~~
      |                                            |
      |                                            size_t {aka long unsigned int}
../../../LovyanGFX/src/lgfx/utility/lgfx_qoi.c:73:43: note: in definition of macro ‘debug_printf’
   73 | #define debug_printf(...) fprintf(stderr, __VA_ARGS__)
      |                                           ^~~~~~~~~~~
../../../LovyanGFX/src/lgfx/utility/lgfx_qoi.c:335:34: note: format string is defined here
  335 |     debug_printf( "Can't malloc %d bytes", writeBufferSize);
      |                                 ~^
      |                                  |
      |                                  int
      |                                 %ld
/usr/bin/ld: /tmp/cctsjkUw.o: undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
/usr/bin/ld: /lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

調べると、-pthread オプションをつけると良いらしいです。

$ g++ -o test user_code.cpp LGFX_SDL.cpp ../../../LovyanGFX/src/lgfx/utility/*.c ../../../LovyanGFX/src/lgfx/v1/*.cpp ../../../LovyanGFX/src/lgfx/v1/misc/*.cpp  ../../../LovyanGFX/src/lgfx/v1/panel/Panel_Device.cpp ../../../LovyanGFX/src/lgfx/v1/platforms/sdl/*.cpp  -lm -lSDL2  -lSDL2_image -I../../../LovyanGFX/src -I../../../LovyanGFX/src/lgfx/v1  -L../../../LovyanGFX/src/lgfx -DLGFX_SDL  -pthread

コンパイルできました。実行します。

$ ./test

うまく実行できました。
image.png

感想

ネイティブ Linux アプリが X を意識せずに使えるようになっているのは素晴らしいですね。WSL自体のアップデート時に不安定になりがちなのですが、それさえ克服できればマルチプラットフォームであれこれするベースに Ubuntu や X アプリを考えてもいいかな?

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?