プロが教えるわが家の防犯対策術!

gccでコンパイルするとa.outというものができます。
(-oで何も設定しなければ)

これはC++のソースファイル1つをコンパイルした時に
できる.oのファイルと同一のものでしょうか?
#.oは.outの略?

.oのファイルの中でmain関数を持っているものが、実行可能形式に
なれるのでしょうか?

A 回答 (4件)

大体その通りだと思いますが、


*.oは、sourceファイルに対するobjectファイルが語源ではないでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

お礼日時:2008/03/20 10:58

.oはオブジェクトファイルを表し、.outとは形式が異なるという意味で別物です。



以下、Windows SUAのgccで実験:
% cat a.c
int main( void ){
return 1;
}
% gcc -c a.c
% file a.o
a.o: X86 COFF object or executable not stripped
% gcc a.o
% file a.out
a.out: Windows NT PE format (EXE), dynamically linked executable not stripped Intel Posix-CUI
%

参考URL:http://docs.hp.com/ja/B2355-90732/ch02s02.html
    • good
    • 0
この回答へのお礼

別物なんですね

ご回答ありがとうございます。

お礼日時:2008/03/20 10:59

他の方が書かれているように


a.out 実行可能なファイル
.o オブジェクトファイル
で、異なります

大抵の実行可能ファイルは

実行するための前準備
プログラム本体
後始末

をする部分に分けられ、あなたが書くのは プログラムの本体 で、この内容が .o ファイルとして書き出されます

,o ファイルに 前準備と後始末の部分を足したものが 実行可能ファイル a.out になります

何で .o をつくる必要があるのかのヒントは 分割コンパイル …かな
    • good
    • 1
この回答へのお礼

なんとなくわかってきました。
ご回答ありがとうございます。

お礼日時:2008/03/20 11:00

UNIX/Linuxでcc(gcc)を使ってコンパイルをして実行


ファイル名の指定を省略した場合にa.outという名前
が付けられるという約束事の様な物です。
.outという名前が実行ファイルの識別子を意味している
訳ではありません。
UNIX系のOSでは識別子で実行可否の判断を行っている
のではなくファイル毎に設定される実行許可指定及び
OSによるファイル形式の自動判別によって実行可否が
判別されるので、実行に必要な条件が合えば識別子が
何であっても実行可能となります。

#.o はWindowsでは.objに相当します。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

複雑な仕組みなんですね・・

お礼日時:2008/03/20 11:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています