第15章 GCC でのビルドコード
本章では、ソースコードを実行可能なコードに変換する必要のある状況を説明します。
15.1. コード形式間の関係
前提条件
- コンパイルとリンクの概念を理解している
使用可能なコード形式
C 言語および C++ 言語を使用する場合は、以下の 3 つのコード形式を使用できます。
C 言語または C++ 言語で記述された ソースコード。プレーンテキストファイルとして表示されます。
このファイルは通常、
.c
、.cc
、.cpp
、.h
、.hpp
、.i
、.inc
などの拡張子を使用します。サポートされる拡張子およびその解釈のリストは、gcc の man ページを参照してください。$ man gcc
コンパイラー でソースコードを コンパイルして作成する オブジェクトコード。これは中間形式です。
オブジェクトコードファイルは、拡張子
.o
を使用します。リンカー でオブジェクトコードをリンク して作成する 実行可能なコード。
Linux アプリケーションの実行可能ファイルは、ファイル名の拡張子を使用しません。共有オブジェクト (ライブラリー) の実行可能ファイルは、
.so
のファイル名の拡張子を使用します。
静的リンク用のライブラリーアーカイブファイルも存在します。これはオブジェクトコードのバリアントで、ファイル名拡張子 .a
を使用します。静的リンクは推奨されません。「静的リンクおよび動的リンク」 を参照してください。
GCC でのコード形式の処理
ソースコードから実行可能なコードを生成するには、2 つの手順を実行してください。各手順では、異なるアプリケーションまたはツールが必要です。GCC は、コンパイラーとリンカーのどちらにも、インテリジェントドライバーとして使用できます。これにより、必要なアクションに gcc
コマンド 1 つだけで対応できます。GCC は、必要なアクション (コンパイルおよびリンク) とそのシーケンスを自動的に選択します。
- ソースファイルは、オブジェクトファイルにコンパイルされます。
- オブジェクトファイルおよびライブラリーはリンクされます (以前にコンパイルしたソールも含む)。
ステップ 1 だけ、ステップ 2 だけ、ステップ 1 と 2 の両方というように、GCC を実行することができます。これは、入力タイプや要求する出力タイプにより決定されます。
大規模なプロジェクトには、アクションごとに個別に GCC を実行するビルドシステムが必要なため、GCC が両方同時に実行できる場合でも 2 つの異なるアクションとしてコンパイルとリンクを実行するように検討する方が有用です。