私の理解によると、so
ファイルは動的ライブラリです。これを使用してldd
依存関係を印刷できます。
ldd -r /usr/lib/aarch64-linux-gnu/libstdc++.so.6
たとえば、次のような出力を得るために実行できます。
linux-vdso.so.1 => (0x0000ffff793f7000)
libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000ffff79173000)
libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffff7902c000)
/lib/ld-linux-aarch64.so.1 (0x0000aaaae0a5d000)
libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000ffff7900b000)
ところで今日実行してみるとldd -r /lib/ld-linux-aarch64.so.1
次のような結果が出ました。
statically linked
この出力が表示されるのはなぜですか?どういう意味ですか?
ベストアンサー1
このファイルは動的ライブラリを使用しませんが、実行可能ファイルにライブラリの必須部分が含まれています。
したがって、ldd
ファイルについては何もわかりません。
これは実行可能ファイルに動的ライブラリが必要ないという意味ですが、ライブラリのバグ修正による利点は得られません。
run time linker
特別な場合は、実行時に動的ライブラリをプライマリバイナリにリンクするために使用されるいわゆるメソッドを確認し、動的ライブラリmmap()
呼び出しの正しいオフセットを生成して確認します。ランタイムリンカーは操作を実行するため、他の動的オブジェクトに依存することはできません。