概要


コンパイル

コンパイラ

  1. (狭義)コンパイル
  2. アセンブル
  3. リンク
    • 実行ファイルができる

GNUコンパイラコレクション (GCC)

Clang

コンパイラをインストール

# 例: CentOS8
dnf install gcc clang

ソースファイル

hello.c

#include <stdio.h>
int main() {
  puts("Hello, C言語!");
  return 0;
}

以降、hello.cのある専用のディレクトリを前提に、


gccコマンドでコンパイル

gcc -o hello-c hello.c

実行

./hello-c
Hello, C言語!

コンパイルの途中過程

  1. (狭義)コンパイル
    • アセンブリコード生成
  2. アセンブル
    • オブジェクトコード生成
  3. リンク
    • 実行ファイル生成

(狭義)コンパイル: gcc -S

gcc -S hello.c

hello.s

.file    "hello.c"
.text
.section    .rodata
.LC0:
.string    "Hello, C\350\250\200\350\252\236!"
(中略)

アセンブル: gcc -c

gcc -c hello.s

# ファイルタイプ: バイナリファイル
file hello.o
hello.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

リンク

gcc -o hello-c hello.o

file hello-c
hello-c: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), \
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, \
for GNU/Linux 3.2.0, \
BuildID[sha1]=2705b36e171235b3940097f2eb7aa909fa9f41fd, not stripped

ライブラリ確認: lddコマンド

ldd hello-c
linux-vdso.so.1 (0x00007ffedbdf5000)
libc.so.6 => /lib64/libc.so.6 (0x00007f443e92a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f443eced000)

clangコマンドでコンパイル

clang -o hello-c hello.c

ソースからインストールとは

GNU Autotoolsにより自動化されたもの

Makefile

インストールのコマンド

  1. ./configure (シェルスクリプト)
    • Makefileを生成、依存を確認
  2. make
    • コンパイル (ビルドとも言う)
  3. make install
    • 実行ファイルやドキュメントなどを各所にコピー
# インストールまで一気に
./configure && make && make install

アンインストール

make uninstall

./configureのオプション


GNU Autotools: インストール自動化

インストール

# 例: CentOS8
dnf install autoconf automake

用意するファイル

configure.ac

AC_INIT([hello-c], [1.0.1]) # パッケージ名、バージョン
AM_INIT_AUTOMAKE # automake初期化
AC_PROG_CC # コンパイラ

# Makefile作成
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

Makefile.am

# foreign: GNUパッケージとしての厳格レベル
AUTOMAKE_OPTIONS = foreign # NEWSやAUTHORSなど不要とする
bin_PROGRAMS = hello-c # 実行ファイル名
hello_c_SOURCES = hello.c # そのソース(変数名ではアンダースコアに)

aclocalコマンド: aclocal.m4生成

autoconfコマンド: configure生成

automakeコマンド: Makefile.in生成

コマンドまとめ

aclocal
autoconf
automake --add-missing

コマンド後のファイル構成

Makefile.am  autom4te.cache  configure.ac  install-sh
Makefile.in  compile         depcomp       missing
aclocal.m4   configure       hello.c

TARファイル生成

./configure
make dist

エンドユーザが「ソースからインストール」できる

解凍後のディレクトリで、

# $HOME/local/にインストール
./configure --prefix=$HOME/local && make && make install