大家讲道理2017-04-17 15:19:02
まず、どのライブラリに依存しているかを知る必要があります。ldd
は役に立ちますが、動的にロードされるライブラリが他のライブラリに依存するかどうかは、プログラムによっては異なります。 pass ldd
この静的解析ツールは、これらの動的にロードされたライブラリを見つけて ldd
を繰り返し呼び出す必要があることを認識しています。
しかし、依存関係を知っていても問題は解決しません。依存関係なしで実行可能ファイルをコンパイルし、それを他のマシンで直接実行できるようにしたいと思います。これには、静态链接
を使用してプログラムのソース コードを再コンパイルする必要があります。同時に、依存ライブラリも .a
の代わりにライブラリのアーカイブ バージョン (通常は .so
) を提供する必要があります。多くの依存ライブラリは、インストール時にデフォルトで .a
バージョンのライブラリをインストールしません。一部のライブラリをソース コードからコンパイルした場合でも、デフォルトではライブラリのアーカイブ バージョンをコンパイルできません。
追加のポイント: glibc を静的に実行可能ファイルにコンパイルしようとする場合は、そうしないようにしてください。 glibc は、ほとんどすべての Linux ディストリビューション システムに含まれる基本ライブラリです。通常、プログラムに静的にリンクする必要はなく、glibc は下位互換性があるため、比較的低いバージョンの glibc でコンパイルするだけで済みます。プログラムは Linux システム上で実行できます。 C++ を使用している場合は、stdlib も検討する必要があるかもしれません。 glibc を静的にしようとすると、不可解な問題が発生する可能性があります。
大家讲道理2017-04-17 15:19:02
ダイナミック ライブラリのみをパッケージ化できます。コンパイルでは、ソース コードをリンクするときに静的リンクを使用する必要があります。 。
パッケージ化するときは、基盤となるライブラリ (glibc
など) のバージョンにも注意する必要があります。マシン環境が同じであれば、手動で設定する必要があります。 LD_LIBRARY_PATH
をクリックしてプログラムを開始します。 。
2 階 + 2 階の 2 階と同じ ldd
プログラムで使用されるダイナミック ライブラリ リンクの方向を表示できます。elf
。