c++ - linux如何把一个二进制可执行文件依赖的库找出来并编译成另一个可执行文件呢?
高洛峰
高洛峰 2017-04-17 15:17:02
0
3
731

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

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全員に返信(3)
大家讲道理

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

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

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

いいねを押す +0
大家讲道理

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

リーリー
いいねを押す +0
大家讲道理

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート