ある実行ファイル1が実行時に動的にどのような共有ライブラリをリンクしているか知りたくなる2ことはよくあるかと思います。そんな時のために。
WindowsやLinuxについては、すみませんが私にとっては今必要というわけではない3ので、ご自分で調べてください。
また、恒例のお断りですが、この文章の内容は、筆者が所属している会社・団体とは一切関わりがありません。いわゆる「自主的な研究の成果の発表」というものです。
macOS
otool または objdump。
otoolなら-Lを指定します。
$ otool -L a.out
a.out:
/usr/lib/libsqlite3.dylib (compatibility version 9.0.0, current version 349.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1336.0.0)
objdumpなら--machoと--dylibs-usedを指定。
$ objdump --macho --dylibs-used a.out
a.out:
/usr/lib/libsqlite3.dylib (compatibility version 9.0.0, current version 349.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1336.0.0)
FreeBSD(GhostBSD)
ldd。
オプションを何も指定しなければ、直接リンクしているものを表示します。4
$ ldd a.out
a.out:
librt.so.1 => /lib/librt.so.1 (0x17a84ba2f000)
libm.so.5 => /lib/libm.so.5 (0x17a84d100000)
libc.so.7 => /lib/libc.so.7 (0x17a84c8ef000)
libthr.so.3 => /lib/libthr.so.3 (0x17a84e03d000)
[vdso] (0x17a84b094000)
-aを指定すると、間接的にリンクしているものも表示します。
$ ldd -a a.out
a.out:
librt.so.1 => /lib/librt.so.1 (0x374245100000)
libm.so.5 => /lib/libm.so.5 (0x374245723000)
libc.so.7 => /lib/libc.so.7 (0x37424722f000)
/lib/librt.so.1:
libthr.so.3 => /lib/libthr.so.3 (0x374245b87000)
libc.so.7 => /lib/libc.so.7 (0x37424722f000)
/lib/libm.so.5:
libc.so.7 => /lib/libc.so.7 (0x37424722f000)
/lib/libthr.so.3:
libc.so.7 => /lib/libc.so.7 (0x37424722f000)
[preloaded]
[vdso] (0x37424501a000)