目次
1.はじめに
はじめに
この記事の目的・内容
この記事では、コンパイル、リンク、ビルドといった用語を整理しながら、ソースコードがどのような仕組みで日頃用いるソフトウェアにまでなるのかを説明する。
これは、初めてプログラミングに触れる人が既存のプログラムを自らの手で改良し、実行可能にすることができるように基礎知識と手順を記すシリーズ記事の一部である。
前提
シリーズで一貫して、以下のような環境を想定する。
- 言語:Fortran
- IDE(統合開発環境):Visual Studio 2022
- コンパイラ:Intel Fortran Compiler Classic (ifort), Intel(R) Fortran Compiler (ifx)
- OS: Windows
Fortranの開発環境は、こちらの記事の方法で構築している。
プログラムが実行可能になるまで
大きな流れ
ソースコードは、コンパイルを経てコンピュータが理解可能な機械語へと変換されたのち、リンクによって人間が操作可能な実行可能ファイルとなる。
コンパイル言語とインタプリタ言語
プログラミング言語は、それが実行可能になるまでのプロセスによって、コンパイル言語とインタプリタ言語の2つに大きく分けられる。
コンパイル言語は、この記事で説明するように、ソースコードを機械語に一括で変換する(コンパイル)言語のことである。FortranやC++がこれに該当する。一方のインタプリタ言語は、ソースコードを機械語に一行毎に逐一変換しながら実行する言語のことである。PythonやJavaScriptがこれに該当する。
各工程について
コンパイル
コンパイルの過程では、プログラミング言語で書かれたソースコードが、プログラミング言語やCPUに応じたコンパイラによってCPUが解釈実行可能な機械語に翻訳される。
その出力はオブジェクトファイル(拡張子.obj)にまとめられる。例えば、「main.f90」ファイルは「main.obj」となる。
Visual Studioでの挙動
Visual Studioの場合、.objはデバックモードならば「プロジェクトのパス/x64/Debug」、リリースモードならば「プロジェクトのパス/x64/Release」に格納されている。
リンク
単独の.objファイルでは、プログラムを完結できないことがある。リンクでは、オブジェクトファイルにプログラムを動かす際に必要な情報を結び付け、実行可能なファイルに仕上げる。
プログラム中に登場する標準関数をライブラリから呼び出す。。
ライブラリの種類
ライブラリファイルには、
- スタティックライブラリ(.lib)
- ダイナミックライブラリ(.dll)
の2種類が存在する。
スタティックライブラリはリンク時にプログラム本体と一体化するのに対し、ダイナミックライブラリは実行のたびに呼び出される。ダイナミックライブラリは複数のアプリケーション間で共有できるので、メモリの節約に繋がる。
スタティックライブラリの一種にインポートライブラリ(.lib)があり、これはオブジェクトファイルの実態ではなく、必要な関数がどのDLLファイルにあり、そのファイルがどこに格納されているかの情報のみを持っている。
ビルド
コンパイルとリンクを連続して行う操作はビルドと呼ばれる。
参考文献
- 矢沢久雄. (2007). プログラムはなぜ動くのか : 知っておきたいプログラミングの基礎知識 (第3版).日経BP社.