2009-07-24 84 views
4

我非常清楚在linux環境下用g ++編譯C++程序。但是,可能是我錯過了一些東西,我正在得到這種奇怪的輸出/行爲。用g ++編譯的C++程序

我在test.cpp中有源文件。 若要編譯此,我做了

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

,一切工作正常。 但是,當我做compling和同臺的連接,這樣

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

我在去年的情況下,生成的測試,但沒有更多的可執行文件;但在我的猜測,它應該工作得很好。 那麼,什麼是錯的或我需要改變一些設置/配置?

我正在使用g ++ 4.3.3

謝謝。

+0

明白了,感謝所有:) – 2009-07-24 14:16:43

回答

12

當你說:

g++ -c test.cpp -o test 

-c標誌抑制連接,所以沒有可執行的產生 - 要重命名的.o文件將。

基本上,不要這樣做。

3

您正在強制編譯器生成目標文件並將其命名爲可執行文件。

本質上,你的最後一行告訴:編譯這個對象文件,但將其命名爲test,而不是test.obj。

2

在g ++命令行指定-o告訴編譯器給出輸出文件的名稱。當您嘗試在一行中完成所有操作時,您只是告訴編譯器將test.cpp編譯爲名爲test的目標文件,並且沒有完成鏈接。

看看神話般的online manual for GCC瞭解更多詳情。

3

-c標誌是指只編譯

嘗試 G ++ -o測試TEST.CPP

1

從gcc手冊:

-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.目標文件無法執行。