當我編譯的程序上的cygwin像下面Cygwin的克++不允許./file在Windows 8
g++ -o helloworld helloworld.cpp
,創建可執行HelloWorld.exe的。然而,我無法用
./helloworld
執行程序,而是我需要使用
./helloworld.exe
有沒有一種方法,使cygwin的認識helloworld
爲文件helloworld.exe
當我編譯的程序上的cygwin像下面Cygwin的克++不允許./file在Windows 8
g++ -o helloworld helloworld.cpp
,創建可執行HelloWorld.exe的。然而,我無法用
./helloworld
執行程序,而是我需要使用
./helloworld.exe
有沒有一種方法,使cygwin的認識helloworld
爲文件helloworld.exe
這與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.exe
和helloworld
。
我不是100%確定Cygwin在這種情況下會做什麼,但解決方案是刪除helloworld
文件並確保您的可執行文件具有所需的.exe
擴展名。 Cygwin編譯器默認會爲你做這件事。即使您運行
g++ helloworld.cpp -o helloworld
它會生成一個名爲helloworld.exe
的可執行文件。
我不知道你做了什麼來創建一個可執行文件沒有.exe
擴展名。無論如何,不要再這樣做。
謝謝!這很好地解決了我的問題! –
@ return0:出於好奇,你究竟是如何創建一個名爲'helloworld'而不是'helloworld.exe'的可執行文件? –
這是預期的行爲。你可能習慣了CMD這樣做,但是linux shell需要確切的名字(甚至是套管)。所以不行。 – Qix
聽起來像一個錯誤報告。 Cygwin一直允許你在過去省略.exe。 –
@Qix事實上,我可以在我的Windows 7機器上使用./helloworld。我不知道是因爲操作系統還是我錯過了一些配置步驟。 –