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)

参考

カテゴリ: