コンパイルされたバイナリの場合は、ldd
をご覧ください。実行可能ファイルをロードするために使用される動的ライブラリのファイル名を示します。それらのライブラリがどのパッケージに属しているかを調べるには、パッケージマネージャのwho-ownsコマンドを使用する必要があります。
> ldd hello
linux-vdso.so.1 (0x00007fff7b5fb000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007fa6b1d96000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa6b2137000)
> pacman -Qo /usr/lib/libc.so.6 /lib64/ld-linux-x86-64.so.2
/usr/lib/libc.so.6 is owned by glibc 2.23-2
/usr/lib/ld-linux-x86-64.so.2 is owned by glibc 2.23-2
この場合、唯一の依存性はglibc
パッケージです。
このようにして、特定の種類の依存関係のみが見つかります。 ライブラリがなくても、バイナリは起動しませんが、動的ライブラリではない追加の依存関係が存在する可能性があります。特に、実行可能ファイルが他のパッケージのファイルに対してopen()、dlopen()、exec()またはcall system()を試行した場合、出力はldd
には表示されません。
ライブラリの場合でも、ldd
は間接的な依存関係は気にせず、ロードされたものすべてをリストします。 readelf -d hello | grep NEEDED
のようなものを使用すると、少しばかり明らかになることがあります。
一部のパッケージマネージャー(RPM)は、パッケージの作成時にこの種のチェックを行い、見つかったすべての依存関係を追加します。他はしません。
私は、あなたが1つの言語を選び、そのパッケージマネージャーについて学ぶ必要があると思う - Maven for Javaを見ることができるようにするために – Lee
あなたが質問すれば 'どのような言語? 'を使用すると、私はちょうど経験を持って来るのが怖いです。それは実際には「示唆」的なものではなく、「定義する」ものです。 – Lee
rpmまたはdebパッケージを作成しようとしていますか: – padippist