Linux cygwing++;不允许在windows 8上使用./file
当我在cygwin上编译一个程序时,如下所示Linux cygwing++;不允许在windows 8上使用./file,linux,g++,cygwin,Linux,G++,Cygwin,当我在cygwin上编译一个程序时,如下所示 g++ -o helloworld helloworld.cpp 将创建一个可执行文件helloworld.exe。但是,我无法使用 ./helloworld 但是我需要使用 ./helloworld.exe 是否有一种方法可以使cygwin将helloworld识别为文件helloworld.exe的可执行文件这与g++没有直接关系 Windows要求可执行文件(由编译器生成的类型,而不是批处理文件)的名称扩展名为.exe;这就是操作系统将它
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
的信息——假设没有名为justhelloworld
的文件)
在本例中,根据您在注释中提供的信息,您的当前目录中显然有两个可执行文件,helloworld.exe
和helloworld
我不能100%确定Cygwin在这种情况下会做什么,但解决方案是删除helloworld
文件,并确保您的可执行文件具有所需的.exe
扩展名。默认情况下,Cygwin编译器将为您执行此操作;即使你跑
g++ helloworld.cpp -o helloworld
它将生成一个名为helloworld.exe
的可执行文件
我不知道您是如何创建一个没有扩展名
.exe
的可执行文件的。不管是什么,不要再做了。这是意料之中的行为。您可能已经习惯了CMD这样做,但linux shell需要确切的名称(甚至是大小写)。不,听起来像是一个bug报告。Cygwin过去一直允许您省略.exe。@事实上,我可以在我的windows 7计算机上使用./helloworld。我不知道是因为操作系统还是我错过了一些配置步骤。@Qix是错误的。作为Cygwin一部分的所有可执行文件的名称中都包含.exe!我怀疑这与g++有关。根据我的经验,Cygwin确实允许您以/helloworld
或/helloworld.exe
的形式调用当前目录中的helloworld.exe
可执行文件。当前目录中是否还有另一个helloworld.
文件?当您键入/helloworld
时,会发生什么情况?(告诉我们你不能做某事远不如告诉我们你尝试时会发生什么有用。)@return0:出于好奇,你到底是如何创建名为helloworld
而不是helloworld.exe
的可执行文件的?