2014-01-15 21 views
14

警告私はC++を初めて使用しています。C++ OBJファイルはなぜ重要なのですか?

自分のプログラムをコンパイルすると、私が持っているすべてのクラスに対して.objが作成されていることがわかります。プログラムファイルで他のプログラムを見たとき、私はこれらのプログラムにほとんど.objがないことに気づいたので、私は何か間違っていると思います。私は自分で何

をリリースディレクトリからOBJファイルを削除して、再度exeファイルを実行しようとしましたが、それは以前と同じように正確に働いていた、私はこれらのファイルは無意味することはできません知っているが...場合

もつかいます?クラスファイルごとに作成する必要がありますか? - どうすればこの問題を解決できますか?

コンパイル時にobjというフォルダのように1つのディレクトリに置くにはどうすればいいですか?

+1

これらのファイルは、リンカーによって使用するために生成されます。あなたはそれらに触れる必要はありません。 –

+0

しかし、 '.obj'ファイルを削除すると、コンパイル時にコンパイルする必要があります。cpp'ファイル。あなたがそれらを必要としない限りあなたのプロジェクトディレクトリからそれらを削除しないでください。 –

+0

あなたは間違ったことはしていません。 .objがなければ、.lib .dllまたは.exeをリンクすることはできません。 – drescherjm

答えて

25

.objファイル(のLinux/Unix上.oファイル)は確かに正式に「コンパイル単位」ごと.cppファイルに1つ、またはそれ以上があるだろう、ソースファイルをコンパイルしています。それらは、プロジェクトを構築するコンパイル段階によって生成されます。

これら.objのファイルは、その後のいずれか基本的にコレクションされているWindows上で静的ライブラリの動的ライブラリの.dll、または.libことができるアプリケーション、通常.exe Windows上のファイル、またはライブラリファイル、(にリンカによって結合されています.objのファイルが1つのファイルにまとめられています(下記を参照)。 Unixのようなプラットフォームアプリケーションでは通常、拡張子はなく、動的ライブラリは.so拡張子を持ち、静的ライブラリは.a拡張子を持ちます。

.libファイルはプログラムで表示されません。実行時には不要なので、リンカーによってのみ使用されます。プロジェクトを構築するリンクフェーズを実行すると、リンカは必要なすべての.objファイルを実行時に使用される.exeおよび.dll個のファイル(または同等のファイル)に結合します。

4

Obj filesは、コンパイル後に生成されます。コンパイラは多くの情報でそれらを生成します。リンカは他のファイルと実行可能ファイルを生成するので、OBJファイルは必要ありません。

非常に拡張された答えは、C++の本で見つけることができます。

問題ありません。しかし、それらを削除すると、コンパイラは変更を加えずにOBJファイルを持たないファイルをコンパイルするようになります。それに気をつけてください。

あなたのコードでまだ作業している場合は、それらについて忘れてください。

+2

私はちょうど半ページのC++「本」を書いており、拡張答えを書かなかった。それゆえ、あなたは間違っています。私はあなたに下線を向けなければなりません。 –

+0

しかし、それは他の投稿、多くの多くのウェブサイト、および他の多くの参考文献に似ています。 ポイントはそれらにリダイレクトし、もう一度それらを書き込まないことです。 – darkgaze

+3

SOの目的は、人々をリソースにリダイレクトするのではなく、人々のためのリソースとして機能させることです。 –

3

オブジェクトファイルは、コードをコンパイルすることによって生成されます。彼らはあなたのコードを受け取り、コンピュータがあなたのソリューションを理解して実装できるようにマシンコードに変換します。オブジェクトファイルが生成されると(オブジェクトファイルは.cppファイルごとに生成されます)、コンパイラはすべての関連オブジェクトファイルを使用して実行可能ファイルを作成します。実行可能ファイルは、オブジェクトファイルとは独立して実行することができ、オブジェクトファイルを削除することができます。別の実行可能ファイルを作成する場合は、関連するコードのオブジェクトファイルが再度必要になります。

希望すると助かります!

関連する問題