ホーム プログラミング言語 gcc GCC -S オプション: 非アセンブリ ファイルをコンパイルする






GCC -S オプション: 非アセンブリ ファイルをコンパイルする




C および C++ ソース コードから実行可能ファイルを生成するには、前処理、コンパイル、アセンブル、およびリンクという 4 つのプロセスを経る必要があることがわかっています。その中で、セクション「 GCC -E オプション: ソース プログラムの前処理」では、demo.c ソース プログラム ファイルを例として取り上げ、GCC を使用して前処理操作を実行し、対応する demo.i 前処理ファイルを生成する方法を示します。

[root@bogon デモ]# cat demo.c
#include <stdio.h>
intメイン(){
puts(“ハロー、ワールド!”);
0 を返します。
}
[root@bogon デモ]# gcc -E demo.c -o demo.i
[root@bogon デモ]# ls
デモ.c デモ.i

これに基づいて、このセクションでは、取得した前処理済みファイルをコンパイルし、それらを対応するアセンブリ ファイルに再処理する方法について説明します。

gcc -S コマンド

コンパイルは、プログラム構築全体の中核部分であり、最も複雑な部分の 1 つでもあります。いわゆるコンパイル、単純な理解は、一連の字句解析、構文解析、意味解析および最適化の後、前処理によって得られたプログラム コードを現在のマシンでサポートされているアセンブリ コードに処理することです。

-S (大文字) オプションを gcc コマンドに追加することにより、GCC コンパイラは指定されたファイルのみをコンパイル ステージまで処理し、対応するアセンブリ コード ファイルを生成することができます。例えば:

[root@bogon デモ]# gcc -S demo.i
[root@bogon デモ]# ls
デモ.c デモ.iデモ.s

gcc -S コマンドを実行すると、コンパイルされたアセンブリ コード ファイルである demo.s という名前のファイルが生成されることがわかります。つまり、デフォルトでは、コンパイル操作により、指定されたファイルと同じファイル名とサフィックス .s を持つ新しいファイルが作成され、コンパイル結果がこのファイルに保存されます。

もちろん、必要に応じて、gcc -S コマンドに -o オプションを追加して、GCC コンパイラーが指定したファイルにコンパイル結果を保存するようにすることもできます。例えば:

[root@bogon デモ]# gcc -S demo.i -o test.i
[root@bogon デモ]# ls
demo.c demo.i demo.s test.i

なお、gcc -S コマンドで操作するファイルは前処理後の .i ファイルである必要はありません. -S オプションの機能は、GCC コンパイラに指定されたファイルをコンパイルの最後まで処理させることです.段階。これは、gcc -S コマンドがソース コード ファイルだけでなく、前処理された .i ファイルに対しても動作できることを意味します。

  • 操作オブジェクトが .i ファイルの場合、GCC コンパイラはこのファイルをコンパイルするだけで済みます。
  • 操作オブジェクトが .c または .cpp ソース コード ファイルの場合、GCC コンパイラは 2 つの手順で前処理とコンパイルを行います。

したがって、demo.c ファイルに対応するアセンブリ ファイルを直接取得する場合は、gcc -S コマンドを使用できます。

[root@bogon デモ]# gcc -S demo.c -o demo.s
[root@bogon デモ]# ls
demo.c デモ.s

したがって、demo.c に対応する demo.s アセンブリ ファイルを直接取得できます。

最終的に生成された .s アセンブリ ファイルについて、関心のある読者は cat demo.s コマンドを実行してファイルの内容を表示できます。これに基づいて、ファイル内のアセンブリ コードの読みやすさを向上させたい場合は、-fverbose-asm オプションを使用できます。GCC コンパイラは、アセンブリ コードに必要なコメントを自動的に追加します。次に例を示します。

[root@bogon デモ]# gcc -S demo.c -fverbose-asm

「 GCC -S オプション: 非アセンブリ ファイルをコンパイルする」についてわかりやすく解説!絶対に観るべきベスト2動画