2009-07-24 15 views
4

Linux環境でg ++を使用してC++プログラムをコンパイルすることに非常に気付いています。しかし、私は何かが欠けているかもしれない、私はこの奇妙な出力/動作を取得しています。g ++でコンパイルしたC++プログラム

私はtest.cppにソースファイルを持っています。 はこれをコンパイルするには、私は

 
(1) 
g++ -c test.cpp 
g++ -o test test.o 
./test 

すべてが正常に動作しませんでした。 しかし、ときに私が私の最後の場合には、この

 
(2) 
g++ test.cpp -o test 
./test => Works fine 
(3) 
g++ -c test.cpp -o test => Doesn't work 

のように、テストが発生していないが、何より実行可能であるが、complingと同じステージにリンクなかったです。私の推測ではうまくいくはずです。 何が間違っているのですか、いくつかの設定や設定を変更する必要がありますか?

私は++ 4.3.3

おかげグラムを使用しています。

+0

ありがとうございました。 –

答えて

12

あなたが言う:

g++ -c test.cpp -o test 

は-cフラグは、リンクを阻害するので、何も実行可能ファイルが生成されません - あなたはの.oファイルの名前を変更しています。

基本的には、そうしないでください。

3

コンパイラがオブジェクトファイルを生成し、実行ファイルのように名前を付けるようにしています。

最後の行では、これをオブジェクトファイルにコンパイルしますが、test.objの代わりにtestという名前を付けます。

2

g ++コマンドラインで-oを指定すると、出力ファイルに与える名前をコンパイラに指示します。 1行ですべてを実行しようとすると、testという名前のオブジェクトファイルとしてtest.cppをコンパイルするようにコンパイラに指示しただけで、リンクは行われませんでした。

詳細はonline manual for GCCをご覧ください。

3

-cフラグがコンパイルのみ

gccのマニュアルから G ++ -oテストTEST.CPP

1

を試してみてください意味:あなたはコンパイルされたオブジェクトファイルをリンクする必要があります

-c Compile or assemble the source files, but do not link. The linking 
     stage simply is not done. The ultimate output is in the form of an 
     object file for each source file. 

実行可能ファイルを取得します。 コンパイルとリンクの詳細はhereです。

1

man g ++を読んでください。スイッチ-cはコンパイルのみを行いますが、リンクはしません。 g ++ -c test.cpp -o test 何を行うのですか g ++ -c test.cpp ただし、オブジェクトファイルはデフォルト名test.oのtest isteadになります。オブジェクトファイルは実行できません。

関連する問題