ライブラリの依存関係でハマった時に使うコマンド
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を含むパス探索が見られる.