2014-05-06 46 views
2

當我編譯的程序上的cygwin像下面Cygwin的克++不允許./file在Windows 8

g++ -o helloworld helloworld.cpp 

,創建可執行HelloWorld.exe的。然而,我無法用

./helloworld 

執行程序,而是我需要使用

./helloworld.exe 

有沒有一種方法,使cygwin的認識helloworld爲文件helloworld.exe

可執行
+1

這是預期的行爲。你可能習慣了CMD這樣做,但是linux shell需要確切的名字(甚至是套管)。所以不行。 – Qix

+0

聽起來像一個錯誤報告。 Cygwin一直允許你在過去省略.exe。 –

+1

@Qix事實上,我可以在我的Windows 7機器上使用./helloworld。我不知道是因爲操作系統還是我錯過了一些配置步驟。 –

回答

2

這與g ++沒有直接關係。

Windows需要具有.exe擴展名的可執行文件(由編譯器生成的類型,而不是批處理文件);這就是操作系統如何將它們識別爲可執行文件。如你所知,Cygwin在Windows之上實現了一個類似POSIX的圖層。 POSIX系統(UNIX,Linux等)不需要任何特殊的可執行文件後綴;操作系統根據文件本身的「幻數」和目錄條目中的可執行位識別文件爲可執行文件。

爲了填補這個空白,Cygwin分別處理.exe擴展。像g ++這樣的編譯器會生成後綴爲.exe的可執行文件,但Cygwin允許您通過鍵入./helloworld.exe./helloworld來執行名爲helloworld.exe的文件。 (這甚至也適用於其他操作; ls -l helloworld會告訴你有關helloworld.exe - 假設有不也是一個名爲只是helloworld文件。)

在這種情況下,基於您在評論中提供的信息,你顯然有當前目錄中有兩個可執行文件,helloworld.exehelloworld

我不是100%確定Cygwin在這種情況下會做什麼,但解決方案是刪除helloworld文件並確保您的可執行文件具有所需的.exe擴展名。 Cygwin編譯器默認會爲你做這件事。即使您運行

g++ helloworld.cpp -o helloworld 

它會生成一個名爲helloworld.exe的可執行文件。

我不知道你做了什麼來創建一個可執行文件沒有.exe擴展名。無論如何,不​​要再這樣做。

+0

謝謝!這很好地解決了我的問題! –

+0

@ return0:出於好奇,你究竟是如何創建一個名爲'helloworld'而不是'helloworld.exe'的可執行文件? –

相關問題