Skip to content

Release v3.0.0

Compare
Choose a tag to compare
@haampie haampie released this 14 Dec 20:47
· 69 commits to master since this release
  • Rewritten in C99 with 0 external dependencies.

  • Significantly faster & smaller (~50KB statically compiled with musl libc, or
    even smaller than the source file with diet libc).

  • Cross-compiled binaries now available thanks to
    binarybuilder.org

  • Improved search path printing when libraries cannot be located.

  • Improved rpath search: shows [rpath of ...] when lib is located by parent
    of parent ... of parent's rpath.

  • fd inspired highlight of filename when printing paths.

  • Caches files by inode instead of soname, which is useful in the sense that
    this allows you to find broken libraries that only work because of a
    particular search order of the tree. (Consider an executable A and libraries
    B, C and D, where A depends on B and C, and B and C depend on D:

      B
     / \
    A   D
     \ /
      C
    

    It may happen that D can be located through B's rpath, but not through C's.
    Then, depending on whether A - B - D is traversed first, or A - C - D, ld.so
    will complain about missing libraries or not. libtree on the other hand
    will always tell you that D can't be located through C.

  • More verbosity levels -v, -vv, -vvv instead of -a and -v flags.

  • Skip fewer libraries by default (only libc / libstdc++ type of libs).

  • PLATFORM rpath interpolation now uses uname, this is not always the same
    as AT_PLATFORM, but unlikely to be different, and in fact the feature is
    rarely used.

  • Support for NODEFLIB flag, which is a dynamic array entry flag that signals
    to the dynamic linker that it should not search default system paths
    including those specified in ld.so.conf.

  • Better FreeBSD support (OSREL, OSNAME interpolation in rpaths and
    /etc/ld-elf.so.conf config file support)

  • Support for relative includes in ld.so.conf config files.

Breaking changes:

  • The bundling feature was dropped in 3.0.0, but is still supported in 2.x.
    It may return in a future 3.x release, but my impression is that there are
    excellent tools like Exodus which do a better job at bundling (in particular:
    they ship a copy of the dynamic linker.)
  • The --skip and --platform flags were removed.
50262cce5523ed0e19e38d563e9eacf69aa4921e01cd9735d96d05d0c1fc3018  libtree_aarch64
2341ff61152056b3f72776983d27ee8620c61e5f5476454a40ab909cfbcbcc85  libtree_armv6l
f3801b197a3ea192697a13d62cb653d5603a68f34cd9350d8ea717184614dde0  libtree_armv7l
28c080c70715a3c1b5354e8de04f6edeb3fd9e6e840c9de7bd28ef2f23b3b16b  libtree_i686
6acee10fd0a9bf18f71f5cb9cc1a41309e063d7eb682f8425355d1346f8c5a13  libtree_x86_64

Thanks to @orbea test-driving this version and improving the Makefile