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


9

これが正しいことを確認するだけです-私は電話します

ldd /path/to/executable

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

回答:


3

正解ですが、考慮すべき点があります。

lddマンページから:

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

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


3
別の理由として、32ビットシステム用にビルドされたバイナリが64ビットシステムでチェックされていることが考えられます。
Ferdinand Prantl 2013年

@FerdinandPrantl 32ビット用にビルドされている場合lddでも、32ビットの依存関係を出力します。
Calmarius 2013

基本的な32ビットlibgcc1がない場合、@ Calmariusは正しくありません。Ubuntu Serverの新規インストールで検証されました。32ビットバイナリのlddを満足させるには、libgcc1:i386をインストールする必要があります。
falstaff

1

@Calmariusは正しいです。これは、32ビットのexeを検討した場合に発生します。基本的な32ビットのライブラリもありません。

私は自分のシステムをアップグレードしようとしています(12.04からUbuntu 16.04のフレッシュインストール)。古い(32ビットサービスは利用できません)avserverを必要とする古い非推奨32ビットサービスをインストールする必要がia32-libsあります。これは、dpkgとの両方apt-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)


wineのインストールは、必要なすべての32ビットライブラリを取得するための非常に巧妙な方法です。
psitae
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.