ホームページ  >  記事  >  運用・保守  >  Linuxの動的リンクと静的リンクの違いは何ですか

Linuxの動的リンクと静的リンクの違いは何ですか

青灯夜游
青灯夜游オリジナル
2022-02-25 16:02:403596ブラウズ

違い: 1. 静的リンクは実行可能プログラムの作成前に実行されますが、動的リンクはプログラムの実行時に実行されます; 2. 静的リンク ライブラリのコードの読み込み速度は速く、実行速度も速くなります。ダイナミックリンクライブラリより若干速い リンクライブラリは速い; 3. ダイナミックリンクに比べて、静的リンクで生成される実行ファイルは大きくなります。

Linuxの動的リンクと静的リンクの違いは何ですか

#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。

Linux における動的リンクと静的リンク

コンパイルとリンクのプロセス

コンパイルはステップ 3 に分かれています: まず、ソース ファイルを前処理します。このプロセスは主に # で定義されたいくつかのコマンドまたはステートメント (マクロ、#include、プリコンパイル命令 #ifdef など) を処理して *.i ファイルを生成し、コンパイルします。このプロセスは主に字句解析、構文解析、意味解析を実行して *.s アセンブリ ファイルを生成し、最後にアセンブリが実行されます。このプロセスは比較的単純で、対応するアセンブリ命令を機械語命令に変換し、リロケータブル ファイルを生成します。バイナリターゲットファイル。

#2 つのリンク方法

  • 静的リンク

  • 動的リンク

  • #静的リンクと動的リンクの最大の違いは、リンクのタイミングが異なることであり、静的リンクは実行可能プログラムを作成する前に行われますが、動的リンクはプログラムの実行時に行われます。

スタティック リンク ライブラリの利点

a): コードの読み込み速度が速く、ダイナミック リンク ライブラリよりも実行速度がわずかに速い;

b ): 開発中にコンピュータに正しい .lib ファイルがあることを確認する必要があるだけです。プログラムをバイナリ形式で公開する場合、ユーザーの .lib ファイルにバージョンの問題があるかどうかを考慮する必要はありません。これにより、DLL Hell などの問題を回避できます。

ダイナミック リンク ライブラリの利点

a) より多くのメモリを節約し、ページ スワッピングを削減します;

b) DLL ファイルは EXE ファイルから独立しています。出力が変更されない限り、インターフェイスは変更されません。つまり、名前、パラメータ、戻り値の型、および呼び出し規則は変更されません。DLL ファイルを置き換えても、EXE ファイルには影響しないため、保守性と拡張性が大幅に向上します。

c) 関数呼び出し規則に従っている限り、異なるプログラミング言語で書かれたプログラムでも同じ DLL 関数を呼び出すことができます;

d) 大規模なソフトウェア開発に適しており、開発を容易にします。プロセスが独立しており、結合が少ないため、開発者と開発組織の間でさまざまな開発とテストが行​​われやすくなります。

欠点

a) 静的リンクを使用して生成された実行可能ファイルはサイズが大きく、同じ共通コードが含まれるため、無駄が生じます;

b)ダイナミック リンク ライブラリを使用するアプリケーションは自己完結型ではなく、アプリケーションが依存する DLL モジュールも存在する必要があります。ロード時にダイナミック リンクが使用され、プログラムの開始時に DLL が存在しないことが判明した場合、システムはアプリケーションを終了します。プログラムを作成し、エラーメッセージを表示します。実行時動的リンクでは、システムは終了しませんが、DLL 内のエクスポートされた関数が使用できないため、プログラムのロードに失敗します。速度は静的リンクより遅くなります。モジュールが更新されるときに、新しいモジュールが古いモジュールと互換性がない場合、そのモジュールの実行に必要なソフトウェアはすべて削除されます。これは初期の Windows では一般的でした。

関連する推奨事項: 「

Linux ビデオ チュートリアル

以上がLinuxの動的リンクと静的リンクの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。