ホームページ  >  に質問  >  本文

c++ - linux如何把一个二进制可执行文件依赖的库找出来并编译成另一个可执行文件呢?

这样把文件拷贝到其他地方就可以使用了

高洛峰高洛峰2765日前709

全員に返信(3)返信します

  • 大家讲道理

    大家讲道理2017-04-17 15:19:02

    まず、どのライブラリに依存しているかを知る必要があります。ldd は役に立ちますが、動的にロードされるライブラリが他のライブラリに依存するかどうかは、プログラムによっては異なります。 pass ldd この静的解析ツールは、これらの動的にロードされたライブラリを見つけて ldd を繰り返し呼び出す必要があることを認識しています。

    しかし、依存関係を知っていても問題は解決しません。依存関係なしで実行可能ファイルをコンパイルし、それを他のマシンで直接実行できるようにしたいと思います。これには、静态链接 を使用してプログラムのソース コードを再コンパイルする必要があります。同時に、依存ライブラリも .a の代わりにライブラリのアーカイブ バージョン (通常は .so) を提供する必要があります。多くの依存ライブラリは、インストール時にデフォルトで .a バージョンのライブラリをインストールしません。一部のライブラリをソース コードからコンパイルした場合でも、デフォルトではライブラリのアーカイブ バージョンをコンパイルできません。

    追加のポイント: glibc を静的に実行可能ファイルにコンパイルしようとする場合は、そうしないようにしてください。 glibc は、ほとんどすべての Linux ディストリビューション システムに含まれる基本ライブラリです。通常、プログラムに静的にリンクする必要はなく、glibc は下位互換性があるため、比較的低いバージョンの glibc でコンパイルするだけで済みます。プログラムは Linux システム上で実行できます。 C++ を使用している場合は、stdlib も検討する必要があるかもしれません。 glibc を静的にしようとすると、不可解な問題が発生する可能性があります。

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:19:02

    Linux の ldd コマンドは、実行可能プログラムが依存するライブラリをチェックします

    リーリー

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:19:02

    ダイナミック ライブラリのみをパッケージ化できます。コンパイルでは、ソース コードをリンクするときに静的リンクを使用する必要があります。 。
    パッケージ化するときは、基盤となるライブラリ (glibc など) のバージョンにも注意する必要があります。マシン環境が同じであれば、手動で設定する必要があります。 LD_LIBRARY_PATH をクリックしてプログラムを開始します。 。
    2 階 + 2 階の 2 階と同じ lddプログラムで使用されるダイナミック ライブラリ リンクの方向を表示できます。elf

    返事
    0
  • キャンセル返事