ライブラリの依存関係でハマった時に使うコマンド

ldd

elf binaryやshared objectに対して使える.

使用例

~$ ldd /usr/bin/apt
    linux-vdso.so.1 =>  (0x00007fff362ab000)
    libapt-pkg.so.5.0 => /usr/lib/x86_64-linux-gnu/libapt-pkg.so.5.0 (0x00007f504c29d000)
    libapt-private.so.0.0 => /usr/lib/x86_64-linux-gnu/libapt-private.so.0.0 (0x00007f504c04a000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f504bcbf000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f504baa8000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f504b6de000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f504b4d9000)
    libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f504b2be000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f504b0a4000)
    libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007f504ae93000)
    liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f504ac71000)
    liblz4.so.1 => /usr/lib/x86_64-linux-gnu/liblz4.so.1 (0x00007f504aa59000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f504a74f000)
    /lib64/ld-linux-x86-64.so.2 (0x0000556e99f8c000)

ld

使用例 ※カレントディレクトリにa.outが生成される可能性あり.

~$ ld --verbose -Y $LD_LIBRARY_PATH -lbz2
(中略)
attempt to open //usr/local/lib/x86_64-linux-gnu/libbz2.so failed
attempt to open //usr/local/lib/x86_64-linux-gnu/libbz2.a failed
attempt to open //lib/x86_64-linux-gnu/libbz2.so failed
attempt to open //lib/x86_64-linux-gnu/libbz2.a failed
attempt to open //usr/lib/x86_64-linux-gnu/libbz2.so succeeded
-lbz2 (//usr/lib/x86_64-linux-gnu/libbz2.so)
libc.so.6 needed by //usr/lib/x86_64-linux-gnu/libbz2.so
found libc.so.6 at //lib/x86_64-linux-gnu/libc.so.6
ld-linux-x86-64.so.2 needed by //lib/x86_64-linux-gnu/libc.so.6
found ld-linux-x86-64.so.2 at //lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
ld: warning: cannot find entry symbol _start; not setting start address

2017/08/13 更新

$LD_LIBRARY_PATHが正しく処理されないので,上記だとだめ.

g++ main.cpp -o main -Wl,--verbose -lbz2

とすれば,$LD_LIBRARY_PATHを含むパス探索が見られる.