C のリンクは実際にどのように機能しますか?
C では、リンクは複数のオブジェクト ファイル (.o ファイル) とライブラリ (.a または .so ファイル) を単一の実行可能ファイル (.exe または .out) にまとめます。リンカーはオブジェクト ファイルとライブラリ間の外部参照を解決し、シンボル テーブルと実行可能ファイルの実行に必要なその他の情報を作成します。
リンクはどのように行われますか?
実際の再配置
再配置のプロセスを説明するために、次の例を考えてみましょう。
// a.cpp int a = 10; int main() { return a; }
// b.cpp int b = 20;
a.cpp と b.cpp をコンパイルすると、2 つのオブジェクト ファイルが得られます: a.oそして、 a.o ファイルには変数 a の定義が含まれ、b.o には変数 b の定義が含まれます。
a.o と b.o をリンクするとき、リンカーは、ファイル内の a と b への参照が確実に行われるようにする必要があります。最終的な実行可能ファイルは正しいアドレスを指します。これは、再配置を実行することによって行われます。
再配置中、リンカーは、メモリ内の最終アドレスと一致するように、実行可能ファイル内の a と b のアドレスを変更します。たとえば、a がアドレス 0x1000 に割り当てられ、b がアドレス 0x2000 に割り当てられている場合、リンカは実行可能ファイル内の a へのすべての参照を 0x1000 を指すように変更し、b へのすべての参照を 0x2000 を指すように変更します。
このプロセスにより、実行可能ファイルが実行時に変数 a と b に正しくアクセスできることが保証されます。
以上がC リンクはどのように機能しますか: オブジェクト ファイルから実行可能ファイルまで?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。