Linux コンパイラ - gcc/g++ の使用
1. コンパイルとリンクのプロセスを確認する
2. オプションの意味を理解する
これらのオプションは覚えるのが難しいのですが、どうすればよいでしょうか? – ESc – iso(相当)
gcc オプション
- -E は前処理のみを有効にし、ファイルは生成しません。出力ファイルにリダイレクトする必要があります。
- -S アセンブリ言語にコンパイルします。アセンブルとリンクは行いません。
- -c オブジェクトコードにコンパイルします
- -o file ファイルに出力
- -static このオプションは、生成されたファイルに静的リンクを使用します。
- -g デバッグ情報を生成します。GNU デバッガーはこの情報を使用できます。
- -shared このオプションは動的ライブラリを可能な限り使用するため、生成されるファイルは比較的小さくなりますが、システムは動的ライブラリを必要とします。
- -O0
-O1
-O2
-O3 4 レベルのコンパイラ最適化オプション。-O0 は最適化なしを意味し、-O1 はデフォルト値、-O3 は最高の最適化レベルを持ちます。 - -w 警告メッセージを生成しません。
- -Wall すべての警告メッセージを生成します。
3. 動的リンクと静的リンクの理解
まず第一に、明確にする必要があります: 私たちが自分たちで実装するコードとライブラリ内のコードは 2 つの概念です.
C 標準ライブラリは他の人によってコンパイルされ、私たちが使用できるように提供されています. コード (printf) を使用するときライブラリ、私たちは私たち自身だけです。関数呼び出しのインターフェイスが書かれており、対応する実装はありません。リンクするときのみ、対応する実装はコンパイルしたコードに関連付けられます。
リンクの本質は、ライブラリ関数を呼び出すときに標準ライブラリとの関連付けをどのように確立するかということです。
コンパイルをサポートするために、システムはユーザーに何を提供しますか?
システムは、標準ライブラリの .h (関数の呼び出し方法を示します) と、標準の動的および静的ライブラリ .so/.a (リンカー関数の場所を示します) を提供します。
ユーザコード + ライブラリコード <==> 実行可能プログラム
これらの結論は Linux システム下でのみ有効ですか?
Windows でも原理は同じですが、Windows ではダイナミック ライブラリが .dll、スタティック ライブラリが .lib である点が異なり、
デフォルトで作成される実行可能プログラムはすべて動的にリンクされます。
Linuxプロジェクト自動化ビルドツール-make/Makefile
1. 背景
- Makefile を書けるかどうかは、ある面から見ると、その人に大規模なプロジェクトを完了する能力があるかどうかを示します。
- プロジェクト内のソース ファイルはカウントされず、タイプ、機能、モジュールに応じて複数のディレクトリに配置されます。makefile は、どのファイルを最初にコンパイルする必要があるか、どのファイルを後でコンパイルする必要があるかを指定する一連のルールを定義します。コンパイルし、さらに複雑な関数操作を実行することもできます。
- makefile のメリットは「自動コンパイル」一度作成すると、make コマンドを 1 回作成するだけで、プロジェクト全体が完全に自動でコンパイルされるため、ソフトウェア開発の効率が大幅に向上します。
- make は、makefile 内の命令を説明するコマンド ツールです。一般に、Delphi の make、Visual C++ の nmake、Linux 上の GNU の make など、ほとんどの IDE にこのコマンドがあります。Makefile がエンジニアリングにおけるコンパイル方法になっていることがわかります。
- make はコマンド、makefile はファイルであり、この 2 つを一緒に使用してプロジェクトの自動構築を完了します。
2.使用する
3. 文法規則を理解する
4. Makefileの導出ルールを理解する
Linux デバッガー-gdb の使用
デバッグはコード作成に不可欠な部分です。Windows
でのデバッグはF9 F10 F10 とデバッグ用のビジュアル ウィンドウを
使用しますが、Linux ではどうなるでしょうか? コマンドラインからデバッグするもので、
デバッグの考え方は同じですが、操作方法が異なります。
1.gdb XXX
しかし、表示ファイルの内容が表示できないのはなぜでしょうか。?
答え:デフォルトでは、gdb は現在リリースされているプログラムをデバッグできませんLinux では、gcc/g++ でソフトウェアを生成する場合、リリース バージョンがデフォルトになります。
2. デバッグモードでの命令
2.1 l(リスト)表示コード
2.2 ブレークポイントの追加/削除/表示
2.3 試運転段階