共有ライブラリへの依存関係を確認する

BeagleBone と直接関係しませんが、知らなかったのでメモ。

コンパイル時、ダイナミックリンクで実行ファイルを作成した場合に、どの共有ライブラリに依存しているか ldd コマンドを使用して調べることができる。

例えば、以下のような bbb という実行ファイル(中身はただの helloworld プログラム)に対して、

debian@beaglebone:/tmp/tmp.wUMMEnbj8v/cmake-build-debug-bbb$ ll
total 88
drwxr-xr-x 3 debian debian  4096 Feb 23 12:54 .
drwxr-xr-x 5 debian debian  4096 Feb 23 12:53 ..
-rwxr-xr-x 1 debian debian 11100 Feb 23 12:54 bbb ← これ
-rw-r--r-- 1 debian debian  5166 Feb 23 12:53 bbb.cbp
-rw-r--r-- 1 debian debian 41700 Feb 23 12:53 CMakeCache.txt
drwxr-xr-x 5 debian debian  4096 Feb 23 12:54 CMakeFiles
-rw-r--r-- 1 debian debian  1376 Feb 23 12:53 cmake_install.cmake
-rw-r--r-- 1 debian debian  4725 Feb 23 12:53 Makefile

ldd コマンドで依存関係を確認することができる。

debian@beaglebone:/tmp/tmp.wUMMEnbj8v/cmake-build-debug-bbb$ ldd bbb
	linux-vdso.so.1 (0xbed75000)
	libstdc++.so.6 => /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 (0xb6e1e000)
	libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xb6da6000)
	libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0xb6d7d000)
	libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6c8f000)
	/lib/ld-linux-armhf.so.3 (0xb6f3c000)

自作プログラムに限らず、実行形式ファイルであれば何でも確認できるので、例えば普段使っているコマンドが突然動かなくなった場合などに、依存している共有ライブラリの存在チェックに使えそう。

(以下は ls コマンドの依存関係を調べた例)

debian@beaglebone:~$ ldd /bin/ls
	linux-vdso.so.1 (0xbed48000)
	libselinux.so.1 => /lib/arm-linux-gnueabihf/libselinux.so.1 (0xb6ee6000)
	libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6df8000)
	/lib/ld-linux-armhf.so.3 (0xb6f37000)
	libpcre.so.3 => /lib/arm-linux-gnueabihf/libpcre.so.3 (0xb6d99000)
	libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0xb6d86000)
	libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0xb6d62000)

指定できるパラメータは以下の通り

debian@beaglebone:~$ ldd --help
Usage: ldd [OPTION]... FILE...
      --help              print this help and exit
      --version           print version information and exit
  -d, --data-relocs       process data relocations
  -r, --function-relocs   process data and function relocations
  -u, --unused            print unused direct dependencies
  -v, --verbose           print all information


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です