2016-04-27 15 views
2

ソースコードがコンパイルされた後、オブジェクトファイルが作成されます。私は.exeファイルしか見ることができないので、どこでオブジェクトファイルを見つけることができますか?私はWindows上でCygwinを使用しているので、gccを使ってプログラムをコンパイルしています。cプログラムのオブジェクトファイルはどこに保存されていますか?

+0

ビルドシステムのようなサウンドは、中間オブジェクトファイルを保存しません。あなたは.exeと言っているので、私はあなたがWindows上にいると仮定しますが、どのコンパイラを使用していますか? –

+0

あなたのツールチェーンによって異なります。あなたのツールチェーンは何ですか? – Quentin

+0

リンク直後に削除されたようです。それらを保持するためのオプションが必要ですが、それはあなたのコンパイラによって異なります。 – ForceBru

答えて

6

多くのコンパイラでは、オブジェクトファイルのみをコンパイルして生成するために、-cオプションがサポートされています。

makeベースのビルドを使用する場合、オブジェクトファイルは中間として処理され、自動的に削除されます。これを避けるには、.PRECIOUS:ターゲットで宣言してください。あなたのプログラムは、単一のCソースファイルで構成されている場合、標準的には、「オブジェクトファイル」を指定していないので、

、あなたは、言語弁護士の答えとして

gcc -c file.c  # Creates file.o, but no file.exe 
gcc -o prog file.o # Creates prog.exe by linking file.o with appropriate libs 
0

実装固有です。いくつかの(奇妙な)Cの実装はインタプリタです(例えば、tinyccなど)がメモリ内でコンパイルすることがあります(したがって、ファイルは生成されません)。他のもの(例えば、私のGCCコンパイラ、尋ねられないときは...)は、オブジェクトファイルを保持しません(gcc -Wall foo.c bar.c -o prog.exefoo.obj & bar.objは一時的なので保管されませんが、YMMV)。

+1

なぜdownvotes? –

+0

おそらく、あなたが通訳に言及していて、質問は編集に関するものです。いくつかは速く読むかもしれません。 –

2

を使用することができます作成​​されなければならないときソースがコンパイルされている:(Quotation from N1570, 6th footnote、強調鉱山)

6)、これらの別々の相が発生した場合のように実装は、多くは、典型的には、実際に一緒に折り畳まれているにもかかわらず、 に動作しなければなりません。ソース ファイル、翻訳単位、および翻訳単位は、として必ず格納する必要はなく、これらのエンティティと任意の外部表現の間に1対1の対応が必要はありません。 この説明は概念的なものであり、特定の実装である を指定していません。

しかし、ほとんどのメインストリームの実装では、「オブジェクトファイル」が生成され、削除されることに注意してください。それらを保持したい場合は、-cフラグを追加します(GCCとclangの両方で動作します)。

関連する問題