Open4

WSL の落とし穴

gincoginco

electronを触ってみていたら、うまく動かなかった。

npm run start

> my-electron-app@1.0.0 start
> electron .

/AAA/BBB/my-electron-app/node_modules/.pnpm/electron@30.1.0/node_modules/electron/dist/electron: error while loading shared libraries: libgtk-3.so.0: cannot open shared object file: No such file or directory

libgtk-3.so.0についてaptで解決しても次々とエラーがでてきてらちが明かない

なんだか、共通ライブラリを使おうとしてる?
lldコマンドで実行ファイルの依存関係を調べれるらしいので試してみる

$ ldd node_modules/electron/dist/electron 
        linux-vdso.so.1 (0x00007fff36b8d000)
        libffmpeg.so => /home/takao/my-electron-app/node_modules/electron/dist/libffmpeg.so (0x00007fc1dfdad000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc1dfda2000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc1dfd9d000)
        libgobject-2.0.so.0 => /lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007fc1dfd3d000)
        libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fc1dfc03000)
        libgio-2.0.so.0 => /lib/x86_64-linux-gnu/libgio-2.0.so.0 (0x00007fc1dfa28000)
        libnss3.so => /lib/x86_64-linux-gnu/libnss3.so (0x00007fc1df8f7000)
        libnssutil3.so => /lib/x86_64-linux-gnu/libnssutil3.so (0x00007fc1df8c4000)
        libsmime3.so => /lib/x86_64-linux-gnu/libsmime3.so (0x00007fc1df89a000)
        libnspr4.so => /lib/x86_64-linux-gnu/libnspr4.so (0x00007fc1df85a000)
        libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007fc1df80c000)
        libatk-1.0.so.0 => /lib/x86_64-linux-gnu/libatk-1.0.so.0 (0x00007fc1df7e0000)
        libatk-bridge-2.0.so.0 => /lib/x86_64-linux-gnu/libatk-bridge-2.0.so.0 (0x00007fc1df7a8000)
        libcups.so.2 => /lib/x86_64-linux-gnu/libcups.so.2 (0x00007fc1df70a000)
        libdrm.so.2 => /lib/x86_64-linux-gnu/libdrm.so.2 (0x00007fc1df6f4000)
        libgtk-3.so.0 => /lib/x86_64-linux-gnu/libgtk-3.so.0 (0x00007fc1deecb000)
        libpango-1.0.so.0 => /lib/x86_64-linux-gnu/libpango-1.0.so.0 (0x00007fc1dee64000)
        libcairo.so.2 => /lib/x86_64-linux-gnu/libcairo.so.2 (0x00007fc1ded3a000)
        libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007fc1debfa000)
        libXcomposite.so.1 => /lib/x86_64-linux-gnu/libXcomposite.so.1 (0x00007fc1debf5000)
        libXdamage.so.1 => /lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007fc1debf0000)
        libXext.so.6 => /lib/x86_64-linux-gnu/libXext.so.6 (0x00007fc1debdb000)
        libXfixes.so.3 => /lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007fc1debd3000)
        libXrandr.so.2 => /lib/x86_64-linux-gnu/libXrandr.so.2 (0x00007fc1debc4000)
        libgbm.so.1 => not found
        libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007fc1deb93000)
        libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fc1deb69000)
        libxkbcommon.so.0 => /lib/x86_64-linux-gnu/libxkbcommon.so.0 (0x00007fc1deb22000)
        libasound.so.2 => not found
        libatspi.so.0 => /lib/x86_64-linux-gnu/libatspi.so.0 (0x00007fc1deae6000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc1de9ff000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc1de9df000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc1de7b6000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fc1eafb5000)
        libffi.so.8 => /lib/x86_64-linux-gnu/libffi.so.8 (0x00007fc1de7a9000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fc1de733000)
        libgmodule-2.0.so.0 => /lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007fc1de72a000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fc1de70e000)
        libmount.so.1 => /lib/x86_64-linux-gnu/libmount.so.1 (0x00007fc1de6ca000)
        libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007fc1de69e000)
        libplc4.so => /lib/x86_64-linux-gnu/libplc4.so (0x00007fc1de697000)
        libplds4.so => /lib/x86_64-linux-gnu/libplds4.so (0x00007fc1de692000)
        libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007fc1de5c9000)
        libgssapi_krb5.so.2 => /lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007fc1de575000)
        libavahi-common.so.3 => /lib/x86_64-linux-gnu/libavahi-common.so.3 (0x00007fc1de567000)
        libavahi-client.so.3 => /lib/x86_64-linux-gnu/libavahi-client.so.3 (0x00007fc1de553000)
        libgnutls.so.30 => /lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007fc1de368000)
        libgdk-3.so.0 => /lib/x86_64-linux-gnu/libgdk-3.so.0 (0x00007fc1de25f000)
        libpangocairo-1.0.so.0 => /lib/x86_64-linux-gnu/libpangocairo-1.0.so.0 (0x00007fc1de24d000)
        libXi.so.6 => /lib/x86_64-linux-gnu/libXi.so.6 (0x00007fc1de239000)
        libcairo-gobject.so.2 => /lib/x86_64-linux-gnu/libcairo-gobject.so.2 (0x00007fc1de22d000)
        libgdk_pixbuf-2.0.so.0 => /lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0 (0x00007fc1de1fd000)
        libepoxy.so.0 => /lib/x86_64-linux-gnu/libepoxy.so.0 (0x00007fc1de0c8000)
        libfribidi.so.0 => /lib/x86_64-linux-gnu/libfribidi.so.0 (0x00007fc1de0aa000)
        libpangoft2-1.0.so.0 => /lib/x86_64-linux-gnu/libpangoft2-1.0.so.0 (0x00007fc1de08f000)
        libharfbuzz.so.0 => /lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007fc1ddfc0000)
        libfontconfig.so.1 => /lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007fc1ddf76000)
        libthai.so.0 => /lib/x86_64-linux-gnu/libthai.so.0 (0x00007fc1ddf6b000)
        libpixman-1.so.0 => /lib/x86_64-linux-gnu/libpixman-1.so.0 (0x00007fc1ddebe000)
        libfreetype.so.6 => /lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007fc1dddf6000)
        libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007fc1dddbb000)
        libxcb-shm.so.0 => /lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007fc1dddb6000)
        libxcb-render.so.0 => /lib/x86_64-linux-gnu/libxcb-render.so.0 (0x00007fc1ddda7000)
        libXrender.so.1 => /lib/x86_64-linux-gnu/libXrender.so.1 (0x00007fc1ddd9a000)
        libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007fc1ddd92000)
        libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fc1ddd8a000)
        libblkid.so.1 => /lib/x86_64-linux-gnu/libblkid.so.1 (0x00007fc1ddd53000)
        libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007fc1ddcbc000)
        liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007fc1ddc91000)
        libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007fc1ddbc0000)
        liblz4.so.1 => /lib/x86_64-linux-gnu/liblz4.so.1 (0x00007fc1ddba0000)
        libcap.so.2 => /lib/x86_64-linux-gnu/libcap.so.2 (0x00007fc1ddb95000)
        libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007fc1dda57000)
        libkrb5.so.3 => /lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007fc1dd98c000)
        libk5crypto.so.3 => /lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007fc1dd95d000)
        libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007fc1dd955000)
        libkrb5support.so.0 => /lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007fc1dd947000)
        libp11-kit.so.0 => /lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007fc1dd80c000)
        libidn2.so.0 => /lib/x86_64-linux-gnu/libidn2.so.0 (0x00007fc1dd7eb000)
        libunistring.so.2 => /lib/x86_64-linux-gnu/libunistring.so.2 (0x00007fc1dd641000)
        libtasn1.so.6 => /lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007fc1dd629000)
        libnettle.so.8 => /lib/x86_64-linux-gnu/libnettle.so.8 (0x00007fc1dd5e1000)
        libhogweed.so.6 => /lib/x86_64-linux-gnu/libhogweed.so.6 (0x00007fc1dd599000)
        libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x00007fc1dd517000)
        libXinerama.so.1 => /lib/x86_64-linux-gnu/libXinerama.so.1 (0x00007fc1dd512000)
        libXcursor.so.1 => /lib/x86_64-linux-gnu/libXcursor.so.1 (0x00007fc1dd506000)
        libwayland-cursor.so.0 => /lib/x86_64-linux-gnu/libwayland-cursor.so.0 (0x00007fc1dd4fc000)
        libwayland-egl.so.1 => /lib/x86_64-linux-gnu/libwayland-egl.so.1 (0x00007fc1dd4f5000)
        libwayland-client.so.0 => /lib/x86_64-linux-gnu/libwayland-client.so.0 (0x00007fc1dd4e4000)
        libjpeg.so.8 => /lib/x86_64-linux-gnu/libjpeg.so.8 (0x00007fc1dd463000)
        libgraphite2.so.3 => /lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007fc1dd43c000)
        libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007fc1dd433000)
        libdatrie.so.1 => /lib/x86_64-linux-gnu/libdatrie.so.1 (0x00007fc1dd428000)
        libbrotlidec.so.1 => /lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x00007fc1dd41a000)
        libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007fc1dd402000)
        libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007fc1dd3dc000)
        libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007fc1dd3d5000)
        libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007fc1dd3bf000)
        libbrotlicommon.so.1 => /lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x00007fc1dd39c000)
        libmd.so.0 => /lib/x86_64-linux-gnu/libmd.so.0 (0x00007fc1dd38f000)

not found のもののみ出してみる

ldd node_modules/electron/dist/electron | grep "not found"
        libgbm.so.1 => not found
        libasound.so.2 => not found

https://packages.ubuntu.com/ から該当するパッケージを探してみる

これかな?

sudo apt install -y libgbm1 liboss4-salsa-asound2

インストールしてみたが、別のエラーがでてきた...

$ npm run start

> my-electron-app@1.0.0 start
> electron .

/AAA/BBB/my-electron-app/node_modules/electron/dist/electron: symbol lookup error: /AAA/BBB/my-electron-app/node_modules/electron/dist/electron: undefined symbol: snd_device_name_get_hint, version ALSA_0.9

ググってみても、それらしきものがでてこない...
GUI開発をwslを使ってやると、うまくいかないケースがあるけど
まさにそういう例かな...断念。

https://mirumi.tech/wsl2-matome/#GUI を伴う開発

参考:https://qiita.com/one-kelvin/items/07bf9b99288e8ecfa4a2#不足しているライブラリのインストール