プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • C言語
  • 【C言語】「コンパイラ」、「リンカ」の役割
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【C言語】「コンパイラ」、「リンカ」の役割

03.05

  • miyabisan2
  • 4件のコメント

この記事は2分で読めます

C言語では、まずはソースコードはプリプロセッサにより前処理をされます。

詳しくは、下記の記事で解説をしています。

【C言語】「プリプロセッサ」や「マクロ処理」について

その次に、「コンパイラ」による処理に引き継がれることになります。

コンパイラの役割

プリプロセッサが出力した内容をチェックして、マシン後に翻訳をします。

その結果、オブジェクトファイルというファイルが生成されます。(なお、OSごとに生成されるオブジェクトファイルは互換性がないので注意です。Windowsで生成したオブジェクトファイルはLinuxでは動かないなど)

例えば、「test.c」というファイルをコンパイルした場合は「test.o」というオブジェクトファイルが生成されます。

ただ、この状態ではまだ、あくまでヘッダファイルのプロトタイプ宣言だけ変換しているので、未完成の状態であり、実行可能ではありません。

コンパイラの動作

なお、コンパイル自体は各ソースファイルごとに完全に独立して行われます。

コンパイラ

OSSからいろいろなベンダーがC言語コンパイラを開発しておりフリーだったり商用だったりとさまざまな種類があります。

Unix系のフリーコンパイラ

  • gcc
  • clang(FreeBSDなどではデフォルト)

Linuxではgccかclangをyumなどで別途インストールが必要になります。

Windowsで使えるコンパイラ

  • MinGW(gcc)
  • Eclipse CDT

なお、Mac OSではデフォルトでCのコンパイラがインストールされています。

商用コンパイラ

  • Intel ICC

リンカ

コンパイルが終わった段階では、プロトタイプ宣言のみの状態の関数が定義されたままです。そこで登場するのがリンカになります。

リンカの役割

まだ、プロトタイプ宣言しかない関数については、実体を含むオブジェクトファイルを結合して最終的な実行可能ファイルを作ります。

ただ、実行可能ファイルを作る場合は、必ずmain関数を含むオブジェクトファイルが必要になります。

実行形式ファイルにはリンカによってその他スタートアップルーチンも結合されます。スタートアップルーチンはOSのシェルによって読み込まれて実行される処理の部分で、どのようなプログラムにも共通して呼び出されます。

リンカの動作

複数ソースファイル全体で、どんなグローバル変数やグローバル関数が定義されているかチェックします。

もし、各ソースファイルで、変数や関数の二重定義があった場合はリンクエラーが発生します。

スポンサーリンク
  • 2019 03.05
  • miyabisan2
  • 4件のコメント
  • C言語
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2019 03.17

    【C言語】「ナル文字」について

  2. 2019 03.17

    【C言語】ポインタの基本や「ポインタ演算」、「ヌルポインタ」について

  3. 2019 03.17

    【C言語】「配列」利用における注意点

  4. 2019 03.16

    【C言語】C言語の特徴、標準ライブラリ、C++の特徴、Visual C++の特徴

  5. 2019 03.02

    【C言語】メモリの基本、メモリを扱う関数

  6. 2019 03.06

    【C言語】「ビルド」作業の知識と効率化について(make等)

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【C言語】「ヘッダーファイル」、「プリプロセッサ」や「…

【C++】「名前空間」、「変数(型推論なども)」、「ク…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー