2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
リンカはプログラム開発において重要な役割を果たし、複数のオブジェクト ファイルとライブラリ ファイルを実行可能ファイルに統合します。リンカーの仕組み、静的リンクと動的リンクの違い、ダイナミック リンク ライブラリの作成方法と使用方法について説明する前に、まずリンカーの基本機能の概要を説明します。
リンカ これは、1 つまたは複数のオブジェクト ファイルとライブラリ ファイルを実行可能ファイルに結合するツールです。その主な機能は次のとおりです。
シンボルの解析 : プログラム内のすべてのシンボル (関数および変数の名前) を識別して処理し、各シンボルが一意の定義を持つようにします。参照されているが定義されていないシンボル (外部シンボル) の場合、リンカは提供されたライブラリまたは他のオブジェクト ファイルで定義を探します。
リセット : 各モジュールのコードおよびデータ アドレスを最終的なメモリ アドレスに調整します。再配置には、コード内のアドレス修正と、すべての参照が正しいメモリ位置を指すようにするためのデータ セグメントの位置調整が含まれます。
セグメントを結合する: 異なるターゲット ファイルからの同じタイプのセグメント (コード セグメント、データ セグメントなど) を 1 つの連続したセグメントにマージします。
処理ライブラリ : プログラムが必要とするライブラリコードをオブジェクトファイルにリンクします。リンカは、静的ライブラリと動的ライブラリの 2 種類のライブラリを処理できます。
実行可能ファイルを生成する: 最終出力は、オペレーティング システム上で実行できる実行可能ファイルです。
静的リンク そしてダイナミックリンク これらはリンカーの 2 つの動作モードであり、それぞれに異なる特性と使用シナリオがあります。
コンセプト : 静的リンクでは、ライブラリ コードはコンパイル時にコピーされ、それを使用するすべての実行可能ファイルに埋め込まれます。このようにして、生成された実行可能ファイルには必要なコードがすべて含まれており、外部ライブラリ ファイルに依存しません。
アドバンテージ:
欠点がある:
静的ライブラリ拡張:
.lib
.a
コンセプト : 動的リンクでは、ライブラリ コードは実行時にロードされ、実行可能ファイルには埋め込まれません。実行可能ファイルにはライブラリへの参照のみが含まれており、ライブラリ コードは実行時にオペレーティング システムによってロードされます。
アドバンテージ:
欠点がある:
動的ライブラリ拡張:
.dll
(ダイナミックリンクライブラリ).so
(共有オブジェクト)オペレーティング システムが異なると、ダイナミック リンク ライブラリの作成方法が若干異なります。一般的な手順とコマンドをいくつか示します。
ライブラリコードを書く:
ダイナミック ライブラリに配置する関数を含む C ソース ファイルを作成します。
// example.cpp
#include