ダイナミックリンクとスタティックリンク

ビルド: コンパイルとリンクを実行して、ソースコードから実行可能な形式のファイルを作る
コンパイルにはコンパイラ、リンクにはリンカというツールが使われる
リンカへの入力は、オブジェクトファイルとライブラリ

C言語の標準ライブラリはlibc
ライブラリファイルは、/lib, /usr/lib, /lib64, /usr/lib64にある

vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ ls -lp /lib
total 416
drwxr-xr-x 2 root root 4096 May 14 21:28 apparmor/
lrwxrwxrwx 1 root root 21 May 14 22:21 cpp -> /etc/alternatives/cpp
drwxr-xr-x 4 root root 4096 May 14 21:28 cryptsetup/
drwxr-xr-x 3 root root 4096 May 14 21:28 firmware/
drwxr-xr-x 2 root root 4096 May 14 21:28 hdparm/
drwxr-xr-x 2 root root 4096 May 14 21:27 ifupdown/
drwxr-xr-x 2 root root 4096 May 14 21:27 init/
-rwxr-xr-x 1 root root 71528 Jun 13 2017 klibc-gLiulUM5C1Zpwc25rCxX8UZ6S-s.so
lrwxrwxrwx 1 root root 22 Nov 1 2013 libcryptsetup.so.4 -> libcryptsetup.so.4.5.0
-rw-r–r– 1 root root 145552 Nov 1 2013 libcryptsetup.so.4.5.0
lrwxrwxrwx 1 root root 17 Jan 8 2014 libip4tc.so.0 -> libip4tc.so.0.1.0
-rw-r–r– 1 root root 27392 Jan 8 2014 libip4tc.so.0.1.0
lrwxrwxrwx 1 root root 17 Jan 8 2014 libip6tc.so.0 -> libip6tc.so.0.1.0
-rw-r–r– 1 root root 31520 Jan 8 2014 libip6tc.so.0.1.0
lrwxrwxrwx 1 root root 16 Jan 8 2014 libiptc.so.0 -> libiptc.so.0.0.0
-rw-r–r– 1 root root 5816 Jan 8 2014 libiptc.so.0.0.0
lrwxrwxrwx 1 root root 20 Jan 8 2014 libxtables.so.10 -> libxtables.so.10.0.0
-rw-r–r– 1 root root 47712 Jan 8 2014 libxtables.so.10.0.0
drwxr-xr-x 3 root root 4096 May 14 21:27 lsb/
drwxr-xr-x 2 root root 4096 May 14 21:28 modprobe.d/
drwxr-xr-x 3 root root 4096 May 14 21:28 modules/
drwxr-xr-x 2 root root 4096 May 14 21:28 modules-load.d/
drwxr-xr-x 3 root root 4096 May 14 21:27 plymouth/
drwxr-xr-x 3 root root 4096 May 14 21:29 recovery-mode/
drwxr-xr-x 2 root root 4096 May 14 21:28 resolvconf/
drwxr-xr-x 3 root root 4096 May 14 21:28 systemd/
drwxr-xr-x 15 root root 4096 Mar 22 2014 terminfo/
drwxr-xr-x 4 root root 4096 May 14 22:21 udev/
drwxr-xr-x 2 root root 4096 May 14 21:29 ufw/
drwxr-xr-x 5 root root 12288 May 14 22:21 x86_64-linux-gnu/
drwxr-xr-x 2 root root 4096 May 14 21:28 xtables/

agrant@vagrant-ubuntu-trusty-64:~/bitcoin$ ls -lp /lib64
total 0
lrwxrwxrwx 1 root root 32 Mar 27 2019 ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.19.so

ライブラリにはシェアードライブラリ(ダイナミックライブラリ)とスタティックライブラリがある
例えば、拡張子が”.so”はShared Objectの略
ライブラリはオブジェクトファイルをアーカイブした集合体で拡張子は.a

シェアードライブラリは動的に決定される
vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ ldd /bin/bash
linux-vdso.so.1 => (0x00007ffd3e1ac000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007fc634203000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc633fff000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc633c36000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc63442c000)

ビルドの実態は、コンパイラやリンカのコマンドを順次実行している
makeは主にc言語で記述したプログラムのビルドに使う MySQLなどではCMake