前の記事では大型コンピュータの話になっちゃいましたね。
パソコンでプログラミングする場合もコンパイルまでは、大型コンピュータと同様です。
コンパイルすると、プログラミング言語で書かれたプログラムは機械語に翻訳されます。翻訳されたものをオブジェクトコードといいます。一つのファイルになっているので、オブジェクトファイルともいいます。中身は機械語で書かれたプログラムです。
このプログラムを実行するために、もう一つする作業があります。「リンク」といいます。
情報システムは大きくなると、たくさんのプログラムを動かすことで一つのシステムを実現します。更に一つ一つのプログラムも大きくなるので、プログラムの実体(部品)をたくさん組み合わせて一つのプログラムにするということもあります。
これはプログラム開発の手法にも関わることで、また別の記事で紹介しますが、プログラムはたくさんの部品から作られているのです。この部品には、すでに前もって作られているものを再利用したり、多くのシステムに共通する機能をもっていて共有されたりするものもあります。(ライブラリと呼んでいます)
プログラムを作る時にそういった「部品」を使うことを前提にしているので、これらの部品をプログラムに取り込まなくてはなりません。
それをするのが「リンカー」です。
リンカーは多くのプログラムの部品をつなぎ合わせて一つの実行ファイルを作ります。また、同時にOS上でプログラムが実行できるように、OSの指定する条件(メモリ上へのプログラムやデータの配置など)によって実行ファイルを作ります。
参考解説記事を紹介しますが、内容はかなり難しいです。本格的に技術者を目指す人は読んでみるのも良いと思います。今は、リンカーというものがあるんだと分かれば良いでしょう。
「コンパイラが作ったバイナリをつなぎ合わせるプログラム lld の作者が語る、リンカの仕組み」
https://logmi.jp/tech/articles/325775
さて、ここまでのことを整理すると、プログラムを作って実行するには・・・
- プログラム言語でプログラムを書く
- プログラム(ソースコード)をコンパイルして、オブジェクトファイル(オブジェクトコード)を作る
- いくつかのオブジェクトファイルやライブラリをリンクして、実行ファイルを作る
- 実行ファイルをOSで実行する
ということになります。これがOSによってコンピュータ上でプログラムを実行する基本的な仕組みです。
コメント