多数の共有オブジェクトに動的にリンクされている実行可能ファイルがあります。(実行可能ファイルにインポートされた)シンボルがどれに属しているかをどのように判断できますか?
複数の可能性がある場合、ldをシミュレーションして、どこから取得されているかを確認できますか?
nm(1)、objdump(1)、elfdump(1)を見てください。
チャーリーが言及したものと同様に、「ldd」はあなたが探していることのいくつかを行うかもしれません.
実行可能ファイルを再リンクできる場合、参照と定義がどこから来ているかを見つける最も簡単な方法は、ld
-y
フラグを使用することです。例えば:
$ cat t.c
int main() { printf("Hello\n"); return 0; }
$ gcc t.c -Wl,-yprintf
/lib/libc.so.6: definition of printf
実行可能ファイルを再リンクできない場合は、実行可能ファイルで実行ldd
してから、'nm -D'
リストされているすべてのライブラリで、grep
目的のシンボルに対して順番に実行します。
$LD_DEBUG=bindings my_program
これにより、すべてのシンボル バインディングがコンソールに出力されます。