2011-12-15 11 views
21

を結びます。は</p> <pre><code>int main(void) {return 0;} </code></pre> <p>ようですが<code>gcc -o test test.c</code>してコンパイルすることができ、手動でのgccの手順を実行してコンパイル、アセンブル、

わかりましたように、gccはコンパイル、アセンブル、リンクを実行します。後者の2つのステップは、asldを実行することによって実現されます。

gcc -S test.cを使用してアセンブリコードを生成できます。

アセンブリコードを実行可能ファイルに変換するには、何をターミナルに入力しますか?

(そうする理由は、アセンブリを学ぶことです)

+2

実際には前処理を行い、次にコンパイルし、次にアセンブルしてからリンクします。前処理は、特にブーストを使用する場合、プロセスの重要な部分である可能性があります。 –

+2

'-v'パラメータを使用すると、GCCがサブプログラムをどのように呼び出すかを見ることができます。 'gcc -o test test.c -v' – mizo

答えて

39

これらのオブジェクトに組み立て、あなたがまたは、コンパイルの四つの段階は、前処理(-E)にあるか分からないことがあり得るので、アセンブリに(-S)をコンパイルgccの

gcc -E --> Preprocessor, but don't compile 
gcc -S --> Compile but don't assemble 
gcc -c --> assemble but don't link 
gcc with no switch will link your object files and generate the executable 
+2

GCCの現在のバージョンにはもう別のプリプロセッサがありません(上記のように前処理を依頼することもできます) – vonbrand

+0

ニースの答えはあまりにも説明しすぎない – CristiFati

1

あなたはgcc -S -o test.s test.c、タイプgcc -o test test.sを実行した後。

3

gcc test.s -o testtesttest.sからコンパイルします。

NASMでもお時間がかかるかもしれません。アセンブリのコンパイルにはgccよりも簡単で親しみやすいかもしれません。

+0

本当にありません。 'gcc'は、あなたのプロジェクトの他の部分をどのように扱うかに完全な互換性を持たせて、システム依存の多くの官僚機構を扱います。 – vonbrand

0

gccは、いつでも編集処理を開始して停止できます。 gcc test.s -o testはアセンブリからtest.sを実行可能ファイルにコンパイルします。

0

を使用してさまざまな段階ですコード(-c)、最後にリンクします。把握するのが最も難しいのは、プリプロセッサの出力を使う方法でした。

gcc -E hello.c | gcc -S -xc -o hello.s - 
gcc -c hello.s -o hello.o 
gcc hello.o -o hello 
関連する問題

 関連する問題