2012-01-11 89 views
3

我剛安裝了Cygwin上運行Windows 7的新的Windows中,我越來越可笑的行爲,當我編譯一個C++程序。這是我鍵入:G ++ Cygwin中不創建.exe文件

g++ test.gpp -o test 

在我的其他Windows盒,這將創建一個exe文件,test.exe的,這是當然的可執行文件。但在此安裝中,文件測試已創建。令我驚訝的是,它不是一個可執行文件,而是看起來像一個調試文件(在ascii printables中)。如果我改爲輸入:

g++ test.gpp -o test.exe 

然後我得到可執行文件test.exe。 (1)爲什麼在我所有的其他實現中我能得到可執行文件,但是沒有這個最近的嘗試? (2)爲什麼我在乎?那麼,我也在Linux機器上工作,不習慣輸入擴展名「.exe」。 (我討厭非linux文件的方面!)我猜測,有一種一次性標誌,我可以設置使g ++創建的默認文件是一個.exe文件。

這個問題的問題是,沒有一個人可能能夠複製它! (我不能在我的其他機器上!)

+1

你確定你沒有在問題系統上安裝兩個不同的'g ++'版本嗎?也許是一個MinGW安裝?試試'哪個g ++'來檢查。 – 2012-01-11 04:11:42

+0

@WarrenYoung:或'輸入-a g ++'查看'$ PATH'中的所有版本。 – 2012-01-11 04:29:13

回答

0
g++ test.gpp -o test 

這應該創建一個名爲test(不帶擴展名)的文件。如果創建的文件比賦予可執行權限文件使用chmod +x test

比使用./test來運行它。看看它是否有效。

+0

不,在Cygwin上,創建的文件是'test.exe'(它也可以被稱爲'test') - 並且'g ++'應該使用執行權限來創建它。 – 2012-01-11 00:55:44

3

據我所知,g++不承認.gpp擴展。將文件從test.gpp重命名爲test.cpp,然後重試。

在我的Cygwin的系統,g++ test.gpp給我一個錯誤信息:

... file format not recognized; treating as linker script ... 

Cygwin編譯器不創建可執行文件與.exe延長(因爲Windows需要它),但它也可以讓你參考此類文件,而無需後綴。因此,舉例來說:

ls -l test.exe 

ls -l test 

都應該告訴你相同的文件。 (如果碰巧有兩個名字的文件,事情會變得有點混亂 - 所以不要這樣做。)g++-s選項也特別對待.exe後綴,所以-o test-o test.exe應該做同樣的事情。

我不知道爲什麼你看到你所描述的行爲。也許你碰巧在test.gpp中有東西看起來像一個有效的鏈接器腳本?