web-dev-qa-db-ja.com

「ldd」によって「動的実行可能ファイルではない」と報告されたファイルは、他のライブラリに依存していますか?

私はこれが正しいことを確認してください-私は電話します

ldd /path/to/executable

そして、「動的実行可能ファイルではない」を返します。これは、他のライブラリに依存しないことを意味しますか?もしそうなら、依存関係を心配せずに別のUbuntuボックスに転送できるということですか?

9
Jason

正しいですが、考慮すべきことがあります。

lddマンページから:

lddはa.out共有ライブラリでは機能しません。

lddは、コンパイラのリリースにlddサポートが追加される前に構築された非常に古いa.outプログラムでは動作しません。これらのプログラムのいずれかでlddを使用すると、プログラムはargc = 0で実行しようとし、結果は予測不能になります。

3
Eric Carvalho

@Calmariusは正しいです。これは、基本的な32ビットライブラリさえなく、32ビットexeを検討した場合に発生します。

システムをアップグレードしようとしています(Ubuntu 16.04の新規インストール、12.04から)。ia32-libs(使用できなくなった)を必要とする古いpropitiatory 32ビットサービスavserverをインストールする必要があります。これは、dpkgapt-getの両方が不満であることを意味し(私が何をするにしても、apt-get -f installを促し、それを実行すると、サービスパッケージをアンインストールすることを要求します)開始しません。

これが32ビットライブラリの欠落につながることを証明するために、古いシステム(Ubuntu 12.04、ia32-libsおよび32ビットライブラリ)を/sda2にマウントしました。 /opt(32ビットバイナリを含む)が/sda2/optにマウントされていることを確認すると、chroot /sda2およびlddを実行して、意図したとおりに実行できます。

これを修正するために、:i386(Arch)を使用してすべての依存ライブラリパッケージを手動でインストールすることができました。ただし、依存関係を把握しようとするのではなく、wineをインストールしました(ほとんどが32ビットであるため、基本的なライブラリをインストールし、実際には必要のない負荷を追加しますが、それで問題ありません)。

dpkgapt-getを修正するために、/var/lib/dpkg/statusを編集し、サービスのパッケージを見つけて、ia32-libsを削除しました。 dpkgapt-getは満足しています

lddは喜んで報告します:-root@withnail:/opt/<service path># ldd avserver linux-gate.so.1 => (0xf77a6000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf778f000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7772000) libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xf776b000) libresolv.so.2 => /lib/i386-linux-gnu/libresolv.so.2 (0xf7752000) libcrypt.so.1 => /lib/i386-linux-gnu/libcrypt.so.1 (0xf7720000) libktssl.so.1.0.0 => /opt/<service path>/libktssl.so.1.0.0 (0xf76cb000) libktcrypto.so.1.0.0 => /opt/<service path>/libktcrypto.so.1.0.0 (0xf756b000) libktz.so.1 => /opt/<service path>/libktz.so.1 (0xf7558000) librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf754f000) libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf73d8000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7383000) libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7366000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf71af000) /lib/ld-linux.so.2 (0x565b1000)

0
sibaz