ldd
lddがどうやってライブラリのパスを得ているのか、ソースを読んで調べてみたら、TRACE_LOADED_OBJECTS_ALLという環境変数を設定して対象のファイルを実行するかdlopenしているだけだった。
FreeBSDの場合
$ LD_TRACE_LOADED_OBJECTS=yes src/yog-generational libm.so.5 => /lib/libm.so.5 (0x28140000) libthr.so.3 => /lib/libthr.so.3 (0x28155000) libc.so.7 => /lib/libc.so.7 (0x2816a000)
上の例は、yog-generationalがライブラリのパスを表示しているわけではない。
$ LD_TRACE_LOADED_OBJECTS=yes /bin/echo libc.so.7 => /lib/libc.so.7 (0x2807d000)
OpenBSDの場合
$ LD_TRACE_LOADED_OBJECTS=yes src/yog-generational Start End Type Open Ref GrpRef Name 1c000000 3c03b000 exe 1 0 0 src/yog-generational 01751000 2175b000 rlib 0 1 0 /usr/lib/libm.so.5.0 02a98000 22aa1000 rlib 0 1 0 /usr/lib/libpthread.so.11.1 0a0da000 2a113000 rlib 0 1 0 /usr/lib/libc.so.51.0 005b7000 005b7000 rtld 0 1 0 /usr/libexec/ld.so
Linuxの場合
$ LD_TRACE_LOADED_OBJECTS=yes src/yog-generational linux-gate.so.1 => (0xb7fe3000) libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7fa9000) libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7fa5000) libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7f8c000) libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e3d000) /lib/ld-linux.so.2 (0xb7fe4000)