Cygwin g ++不允许在Windows 8上使用./file

时间:2014-05-06 18:08:26

标签: linux g++ cygwin

当我在cygwin上编译程序时,如下所示

g++ -o helloworld helloworld.cpp

创建可执行文件helloworld.exe。但是,我无法使用

执行该程序
./helloworld

但我需要使用

./helloworld.exe

有没有办法让cygwin将helloworld识别为文件helloworld.exe的可执行文件

1 个答案:

答案 0 :(得分:2)

这与g ++没有直接关系。

Windows要求可执行文件(由编译器生成的类型,而不是批处理文件)具有.exe扩展名的名称;那就是操作系统如何将它们识别为可执行文件。

如你所知,Cygwin在Windows上实现了类似POSIX的层。 POSIX系统(UNIX,Linux等)对可执行文件不需要任何特殊后缀;操作系统根据"幻数"将文件识别为可执行文件。在文件本身和目录条目中的可执行位。

为弥合这一差距,Cygwin分别处理.exe扩展。像g ++这样的编译器生成带有.exe后缀的可执行文件,但Cygwin允许您通过键入helloworld.exe./helloworld.exe来执行名为./helloworld的文件。 (这甚至适用于其他操作; ls -l helloworld会向您显示有关helloworld.exe的信息 - 假设其中还没有名为helloworld的文件。)

在这种情况下,根据您在评论中提供的信息,您显然在当前目录helloworld.exehelloworld中有两个可执行文件。

我不能100%确定Cygwin在这种情况下会做什么,但解决方案是删除helloworld文件,并确保您的可执行文件具有所需的.exe扩展名。 Cygwin编译器默认会为您执行此操作;即使你跑

g++ helloworld.cpp -o helloworld

它将生成一个名为helloworld.exe的可执行文件。

我不知道你在没有.exe扩展名的情况下创建了一个可执行文件。不管是什么,不要再做了。