readelfがは、そのlibutil.so.1は、SSHユーティリティによって必要とされる報告:libutil、NMが言うようにreadelfがレポートはそれほど必要に応じてファイルが、ない機能(または他のシンボル)それから使用されている
$readelf -s /usr/bin/ssh | grep libutil
0x0000000000000001 (NEEDED) Shared library: [libutil.so.1]
。 so.1はわずか6外部シンボルを持っています
$nm -D /lib64/libutil.so.1 | grep "T "
000000331e0015a0 T forkpty
000000331e000fa0 T login
000000331e0010f0 T login_tty
000000331e001190 T logout
000000331e0012e0 T logwtmp
000000331e0013d0 T openpty
しかし、SSHから参照されていないこれらのシンボル:
$nm -D /usr/bin/ssh | grep forkpty
$nm -D /usr/bin/ssh | grep login
$nm -D /usr/bin/ssh | grep login_tty
$nm -D /usr/bin/ssh | grep logout
$nm -D /usr/bin/ssh | grep logwtmp
$nm -D /usr/bin/ssh | grep openpty
(grep not showing any matches)
何が起こっていますか?なぜライブラリはNEEDEDとして参照されていますが、そこからのシンボルは使用されていませんか?これは一例にすぎません。私は他の実行可能ファイルの依存関係を分析しながら、このような "空の"参照の多くを満たしました。
このアプリを作成したディストリビューションとは何ですか? – yugr
ディストリビューションはRed Hat 6.6でしたが、問題はないと思います。 – spacistor
それは、近代的なディストリビューションでは '--as-needed'がデフォルトで有効になっているので、問題を解決するために' --no-as-needed'を使う必要があります。 Redhat 6は(ただチェックされていても)うまくいくようです。 – yugr