cdepillabout / termonad

Terminal emulator configurable in Haskell.
https://hackage.haskell.org/package/termonad
BSD 3-Clause "New" or "Revised" License
401 stars 49 forks source link

error while loading shared libraries: libvte-2.91.so.0 #211

Closed wineee closed 2 years ago

wineee commented 2 years ago

I install termonad from nixpkgs, termonad doesn't work after recent upgrade

> termonad
Launching custom binary /home/rewine/.cache/termonad/termonad-linux-x86_64

/home/rewine/.cache/termonad/termonad-linux-x86_64: error while loading shared libraries: libvte-2.91.so.0: cannot open shared object file: No such file or directory
cdepillabout commented 2 years ago

My guess is that you did a Nix garbage collection, and the libvte that the Termonad executable is trying to link to is no longer on your system.

Here's the command you can use to check out the libvte library that your cached termonad executable is trying to link to:

$ readelf -d ~/.cache/termonad/termonad-linux-x86_64  | grep vte
 0x0000000000000001 (NEEDED)             Shared library: [libvte-2.91.so.0]
 0x000000000000001d (RUNPATH)            Library runpath: [...:/nix/store/1phcdrnbbwgqvwy3yaraxl450hn04g63-vte-0.64.1/lib:...]

If /nix/store/1phcdrnbbwgqvwy3yaraxl450hn04g63-vte-0.64.1/lib no longer exists on your system, then it makes sense that this cached binary is giving you problems.

The easiest solution is probably to just delete the cached binary and let Termonad rebuild it.

$ rm -rf ~/.cache/termonad/
$ termonad

If /nix/store/1phcdrnbbwgqvwy3yaraxl450hn04g63-vte-0.64.1/lib does still exist on your system, then I have no idea what could be going on. You'll have to do some more debugging. Potentially with LD_DEBUG: http://www.bnikolic.co.uk/blog/linux-ld-debug.html

wineee commented 2 years ago

You are right, libvte was removed by Nix garbage collection. It worked fine after I reinstalled. But I don't know why Nix remove a useful dependency,I add termonad in environment.systemPackages

cdepillabout commented 2 years ago

But I don't know why Nix remove a useful dependency,I add termonad in environment.systemPackages

Termonad uses https://hackage.haskell.org/package/dyre for the recompilation logic.

Here is a little documentation on exactly what is happening: https://hackage.haskell.org/package/termonad-4.2.0.0/docs/Termonad.html#v:defaultMain

Basically, Termonad creates an executable ~/.cache/termonad/termonad-linux-x86_64 that is linked to an old libvte. Nix doesn't realize that ~/.cache/termonad/termonad-linux-x86_64 needs libvte to continue to exist, so it is happy to garbage collect the old libvte library.


There could be some logic added to Termonad to try to rebuild the ~/.cache/termonad/termonad-linux-x86_64 executable if it exists, but it is not able to be run for whatever reason.