libtree - A more modern option to ldd
It tells you whether or not a library is installed and why.
If you need to know which libraries a binary uses to later use them in some way, we know that the ldd
command is one of the most used alternatives, however it has some limitations, that is, there are libraries that are not found and it does not inform.
For that you can replace it with libtree
What does libtree
do ?
deciduous_tree
turns ldd into a treepoint_up
explains why shared libraries are found and why not- deploy executables and dependencies in a single directory
Installation
There is no secret, just download the binary, give it execution permission and use it, like this:
wget -qO libtree https://github.com/haampie/libtree/releases/download/v2.0.0/libtree_x86_64
chmod +x libtree
./libtree $(which man)
If you want, install on your system:
sudo install -v libtree /usr/local/bin/
And use it as libtree
command.
To deploy binaries and dependencies in a separate directory, use:
libtree $(which man) -d man.bundle --chrpath --strip
The output will be similar to the one below:
$ libtree $(which man) -d man.bundle --chrpath --strip
man
├── libmandb-2.9.1.so [runpath]
│ ├── libman-2.9.1.so [runpath]
│ │ ├── libpipeline.so.1 [ld.so.conf]
│ │ └── libseccomp.so.2 [ld.so.conf]
│ └── libgdbm.so.6 [ld.so.conf]
├── libman-2.9.1.so (collapsed) [runpath]
└── libpipeline.so.1 (collapsed) [ld.so.conf]
Deploying to "man.bundle/usr"
"/usr/bin/man" => "man.bundle/usr/bin/man"
"/usr/lib/man-db/libmandb-2.9.1.so" => "man.bundle/usr/lib/libmandb-2.9.1.so"
"/usr/lib/man-db/libman-2.9.1.so" => "man.bundle/usr/lib/libman-2.9.1.so"
"/usr/lib/x86_64-linux-gnu/libpipeline.so.1.5.2" => "man.bundle/usr/lib/libpipeline.so.1.5.2"
creating symlink "man.bundle/usr/lib/libpipeline.so.1"
"/usr/lib/x86_64-linux-gnu/libseccomp.so.2.5.1" => "man.bundle/usr/lib/libseccomp.so.2.5.1"
creating symlink "man.bundle/usr/lib/libseccomp.so.2"
"/usr/lib/x86_64-linux-gnu/libgdbm.so.6.0.0" => "man.bundle/usr/lib/libgdbm.so.6.0.0"
creating symlink "man.bundle/usr/lib/libgdbm.so.6"
$ tree man.bundle/
man.bundle/
└── usr
├── bin
│ └── man
└── lib
├── libgdbm.so.6 -> libgdbm.so.6.0.0
├── libgdbm.so.6.0.0
├── libman-2.9.1.so
├── libmandb-2.9.1.so
├── libpipeline.so.1 -> libpipeline.so.1.5.2
├── libpipeline.so.1.5.2
├── libseccomp.so.2 -> libseccomp.so.2.5.1
└── libseccomp.so.2.5.1
3 directories, 9 files
For more information visit the repository .
Comments