Linuxの、ビルドとかコンパイルとかリンクって何なの?をまとめてみた。
コンパイル
ソースコードからオブジェクトファイルを生成する作業例:foo.c → foo.o
コンパイルを行うソフトウェアをコンパイラという。
リンク
複数のオブジェクトファイルやライブラリをまとめて1つの実行可能ファイルを作る作業例:foo.o + bar.o → myprogram (実行可能ファイル)
リンクを行うソフトウェアをリンカという。
リンカが受け取るものは2種類ある。
- オブジェクトファイル
- ライブラリ
ライブラリ
コンパイル済みの、再利用可能ソフトウェア。代表的なものはlibc
Linuxでは下記の場所に入っている。
/lib
/usr/lib
/lib64
/usr/lib64
ライブラリのファイル名は全てlibから始まる
例
libcrypt-2.12.so
libnss_nis-2.12.so
libpthread.so.0
libc-2.12.so
ライブラリには2種類ある。
- 静的ライブラリ(スタティックライブラリ)
- 動的ライブラリ(ダイナミックライブラリ、シェアードライブラリ,DLLともいう)
静的ライブラリは、拡張子が.aである。(例:libc.a)
動的ライブラリは、実行可能ファイルが起動されたときに動的に読み込まれる。
動的ライブラリは、拡張子が.soである。(Shared Objectの略) (例:libc.so)