実行可能ファイルをサポートするためにロードする必要があるパッケージまたはライブラリを決定する方法はありますか?


11

パッケージとしてビルドされていない、再コンパイルできないコンピューターにインストールしたい実行可能ファイルがあり、実行に必要なライブラリーをダウンロードしたい。

以下は、実行中の出力の一部であり、lddそれに

libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)
libcairo.so.2 => /usr/lib/i386-linux-gnu/libcairo.so.2 (0xb6f64000)
libatk-1.0.so.0 => /usr/lib/i386-linux-gnu/libatk-1.0.so.0 (0xb6f43000)
libsqlite3.so.0 => /usr/lib/i386-linux-gnu/libsqlite3.so.0 (0xb6e9e000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6cf4000)
/lib/ld-linux.so.2 (0xb786e000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb6cd3000)
libgio-2.0.so.0 => /usr/lib/i386-linux-gnu/libgio-2.0.so.0 (0xb6b7c000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6b4f000)

ディスクの使用量を最小限に抑えるために、この情報を使用してダウンロードするパッケージを選択したり、一覧表示されたライブラリとその依存関係のみを抽出したりできるツールはありますか?システムはヘッドレスVMで実行されており、プログラムはVNCを介して表示されます。

本格的なグラフィックデスクトップで必要なライブラリのほとんどが提供されると思いますが、必要なライブラリとその依存関係、およびそれをサポートするのに十分なX Windowsパッケージだけをダウンロードしたいと思います。


1
どんなOS?パッケージとその名前、およびパッケージマネージャーは、ディストリビューション間で異なります(これは、ある種のLinuxを実行していることを前提としています)。
terdon

この場合は、DebianとUbuntuです
vfclists

その場合、私の答えはあなたのために働くはずです。
terdon

実際、私は遅刻してそれをテストしようとしています。私は、プレーン、それについて忘れてしまった、ちょうどこの1つはLOL、トップ関連する質問として表示させ同様の質問を
vfclists

回答:


14

どちらのOSを使用しているかはまだ話していないので、Linuxを想定して、例としてDebianを使用します。あなたの質問に対する素早い回答は、私が知る限りではありません。これは便利な回避策かもしれませんが:

ldd your_prog | awk '{print $1}' | sed 's/\..*//' | 
  while read n; do echo "----- $n ----"; apt-cache search ^$n; done

これにより、ldd出力が解析されて実行されapt-cache(OSに相当するものに置き換えられます)、名前と説明にによって返されるライブラリ名の最初の部分が含まれているパッケージのリポジトリが検索されlddます。

これはそれらすべてを見つけることはできず、一部の(のようなlibc)結果が多すぎますが、役立つ可能性があります。


@FaheemMitha apt-fileがより良い方法かもしれないと指摘しました。例えば:

ldd /bin/bash | awk '/=>/{print $(NF-1)}'  | 
 while read n; do apt-file search $n; done |
  awk '{print $1}' | sed 's/://' | sort | uniq

リンクされたライブラリを提供するパッケージ名のリストが返されます。


1
apt-file search矢印の右側にある実際のファイルではより効果的です。
Faheem Mitha 2013年

@FaheemMitha非常に良い点、ありがとう。回答を編集しました。
terdon

ダウンロードする必要があるライブラリを見つけるために、システム上のライブラリの存在をテストするためにコマンドをどのように調整できますか?私が最近尋ねた質問は、その方向に沿っていると思います。再開をお願いします。
vfclists 2014年

@vfclistsは本当に価値がありません。apt-get installそれらすべてとすでにインストールされているものだけが無視されます。
terdon

その理由は、迅速なダウンロードのために、余分なライブラリのないVMを作成するためです。パッケージのインストールには多くの不要なアイテムが含まれており、実行可能ファイルに必要なライブラリファイルとその依存関係のみが必要です。また、bashとLinuxのスキルを磨く機会にもなります。Pythonなし。
vfclists 2014年

3

@terdonの答えはすばらしいですが、Debianシステムにデフォルトでインストールされてdpkg-queryいるのとapt-fileは異なり、これを使用する方が簡単です。

ldd /bin/bash | awk '/=>/{print $(NF-1)}' | while read n; do dpkg-query -S $n; done | sed 's/^\([^:]\+\):.*$/\1/' | uniq

これにより、パッケージのリストが生成されます。


1

あなたの最善の策は、実際にディストリビューションをサポートするパッケージを見つけることです。しかし、それでうまくいかない場合は、他に方法が1つしかありません。

必要に応じてlddを実行し、それらの依存関係を手動でインストールします。

例えば libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)

私にとってはapt-get install libpango:i386、Debian不安定版のバージョンで十分であるようにインストールして祈ることを意味します。

ldd、Googleの各行を調べ、使用可能なリポジトリーを調べて、基本的に幸運になる必要があります。次に、1つずつインストールします。プログラムが実際に実行されるまで。ただし、lddは「単純な」プログラムに対してのみ機能します。プラグインを呼び出すプログラムや任意のコードを実行するプログラムは、全体として別の問題です。それらについては、コンソールから実行し、クラッシュ/エラーが発生したときに修正する必要があります。

とはいえ、バイナリのみの実行可能ファイルを維持するのは非常に困難です。あなたは何か他のものを使うことを検討したいかもしれません。ディストリビューションがその実行可能ファイルをビルドしたシステムより少し進んでいる場合、または少し遅れている場合、それが機能しない可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.