記事のディレクトリ
1.のgcc / gの++ /打ち鳴らします
3フレーム目以降の移植はパラメータが渡されるべきかを明確に理解し、クロスコンパイルに基本的なC / C ++コンパイラを使用することを学ぶことが可能です。
打ち鳴らします
打ち鳴らすは、C、C++、Object-C
軽量のコンパイラ。基づくLLVM
(LLVMは、C ++コンパイラ・フレームワークで書かれたフレームシステムであり、それはライブラリ関連コンパイラの開発のために言うことができます)
GCC
GNU C
コンパイラ。もともとのみ取り扱いC语言
、すぐに拡大し、それは対処することが可能となりますC++
。(また、革のスレーブプログラムとして知られているGNUプログラムは、。目標は、完全にフリーなオペレーティングシステムを作成することです)
G ++
GNU c++
コンパイラ
GCCは、G ++、打ち鳴らすは、コンパイラです。
- gccとC / C ++をコンパイルすることができ++グラムが、コンパイラ異なる振る舞い。
- 打ち鳴らすは、gccのに比べて、またコンパイラである、それが打ち鳴らすコンパイラを使用しているときにエラーが発生するため、より速く、より小さく、など、コンパイラの出力が、問題のいくつかのソフトウェアのソースコードをコンパイルする必要があります。
- そして、打ち鳴らすの打ち鳴らすは++、GCCとG ++と同等です。
gccとG ++の場合:
- 以下のための接尾辞
.c
、接尾辞、C ++プログラムとしてソースファイル、CプログラムとしてGCC使用して、およびg ++.cpp
C ++プログラムとして見られるどちらも、 - G ++自動的にC ++標準ライブラリのSTLをリンクする、GCCはしません
- gccの__cplusplusマクロを定義、およびg ++意志はありません
Linuxの gccのインストール
apt install build-essential #安装gcc、g++与make
2.コンパイラのプロセス
実行可能ファイルになるために前処理されるC / C ++ファイル(前処理)、コンパイラ(コンパイル)、アセンブラ(アセンブリ)、および連結(リンク)。
1、前処理
gccを-Eのmain.c -o main.i
-E
役割は、GCCコンパイラは前処理の終わりで停止できるようにすることです。
メイン処理は、前処理段階を含むなどを定義します。これは、#includeは、ソースは実際の文字列に置き換えマクロの#defineしするために使用位置に入ってくるの.hファイルを#include
2、コンパイル段階
gccの-S main.i -o main.s
-S
エンド効果がコンパイルされ、コンパイラは、コンパイル済みのファイルを生成します。
この段階で、GCCは、第1のアセンブリ言語にコードを翻訳チェックし、正しい、GCCのコードを行うべき実際の作業を決定するために、コード、構文エラー、等の仕様を確認してください。
3、コンパイル段階
gccの-c main.s -o main.o
.Sバイナリマシン命令ファイルの.oに変換するファイルのコンパイル段階、この段階では.C、.Iを受け、.Sファイルは問題ありません。
図4に示すように、リンクステージ
gccの-oメインmain.s
リンク・フェーズは、リンクされたライブラリを。main.cの中に実装する「printfの」関数を定義していない、と「stdio.hの」に、プリコンパイルに含まれている機能のみを宣言するもあります。これらの機能を実現するためのシステムを行うために呼び出されlibc.so
、動的ライブラリを。
ライブラリは、一般的に静的および動的ライブラリの2種類に分かれています
- 静的ライブラリにコンパイルし、リンクされている意味し、すべてのコード・ライブラリ・ファイルは、結果のファイルが大きいので、実行可能ファイルに追加されていないが、それはもはやランタイム・ライブラリ・ファイルで必要とされています。接尾辞「.A」でのLinux。
- あなたは、コード・ライブラリ・ファイルをコンパイルしてリンクするDLLのコントラストは、実行可能ファイルに追加しましたが、プログラムの実行時にランタイム・ライブラリ・リンクファイルによってロードされていません。Linuxの接尾辞「の.so」、前述のlibc.soは動的ライブラリであるとして。コンパイル時にgccのデフォルトの動的ライブラリ。
時間を節約しないための静的ライブラリー:動的コードをリンクする必要は内部コードを直接呼び出す必要があります
スペースを節約するために動的ライブラリ:動的ライブラリは、両方のプログラムと呼ばれている場合は、動的ライブラリは、専用メモリを必要とし
Javaは唯一のパッケージを経由せずに、動的ライブラリで直接使用することができます。