ldd コマンドの使用に関するいくつかの問題の概要

ldd コマンドは、実行可能プログラムが依存するダイナミック ライブラリとダイナミック ライブラリのパスを一覧表示できます。いくつかのコンパイルの問題をチェックするのに便利な場合があります。
しかし、最近、ldd を実行すると動的実行可能ファイルではないことが示されるという問題に遭遇しました。以下に示すように
ここに画像の説明を挿入

この問題にはいくつかの理由が考えられます。

  1. 確かに、このファイルは実行可能プログラムやダイナミック ライブラリではなく、Linux 上の elf ファイルでもありません。たとえば、Windows でプログラムをコピーして、Linux で実行します。
  2. ファイルが 32 ビットでシステムが 64 ビットである場合、またはその逆、ファイルが 64 ビットでシステムが 32 ビットである場合。
  3. ファイルは x86 アーキテクチャですが、システムは arm アーキテクチャである場合、またはその逆の場合、クロスコンパイルされたファイルでこの問題が発生することがよくあります。
    上記 3 つの場合、file コマンドを使用してファイル形式を確認すると、
    次のように、ファイルが elf 形式、64 ビット、X86-64 ビットであることがわかります。使用しているシステムが一致していれば、問題ありません。
    ここに画像の説明を挿入
  4. もう 1 つ、これも最近発生した非常に特殊な状況ですが、ldd のバージョンがコンパイラのバージョンと一致しません。プログラムは gcc バージョン 7.5 でコンパイルされており、
    実環境の ldd は gcc バージョン 10.3 でコンパイルされています。バージョンが一致しないと問題が発生します。ldd のバージョンがプログラムのコンパイル環境の ldd のバージョンと一致しているかどうかを確認できます。
    ここに画像の説明を挿入

libc.so のバージョンを表示する別の方法があります。ldd のバージョンは libc.so のバージョンに対応します。以下に示すように、libc.so を実行するとバージョンを表示できます。
これにはさらに興味深い点が含まれます。libc.so は動的ライブラリであるだけでなく、個別に実行することもできます。興味のある学生は調べてみてください。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/yangcunbiao/article/details/125921690