GCC / ELF-私のシンボルはどこから来たのですか?
質問
多数の共有オブジェクトに動的にリンクされる実行可能ファイルがあります。どのシンボル(実行可能ファイルにインポートされた)が属しているかをどのように判断できますか?
複数の可能性がある場合、ldを整理して、それがどこから取られているかを見ることができますか?
解決
nm(1)、 objdump(1)および elfdump(1)。
他のヒント
チャーリーが言及したものと同様に、" ldd &quot ;あなたが探しているもののいくつかを行うかもしれません。
実行可能ファイルを再リンクできる場合、参照と定義がどこから来たかを見つける最も簡単な方法は、 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
これにより、すべてのシンボルバインディングがコンソールに出力されます。
所属していません StackOverflow