当我在 cygwin 上编译如下程序时
g++ -o helloworld helloworld.cpp
创建了一个可执行文件 helloworld.exe。但是,我无法使用执行该程序
./helloworld
但我需要使用
./helloworld.exe
有没有办法让 cygwin 将 helloworld
识别为文件 helloworld.exe
的可执行文件
最佳答案
这与 g++ 没有直接关系。
Windows 要求可执行文件(由编译器生成的类型,而不是批处理文件)的名称带有 .exe
扩大;这就是操作系统将它们识别为可执行文件的方式。
正如您所知,Cygwin 在 Windows 之上实现了一个类似 POSIX 的层。 POSIX 系统(UNIX、Linux 等)不需要任何特殊的可执行文件后缀;操作系统根据文件本身的“魔数(Magic Number)”及其目录项中的可执行位将文件识别为可执行文件。
为了弥补这一差距,Cygwin 处理 .exe
单独扩展。像 g++ 这样的编译器会生成带有 .exe
的可执行文件。后缀,但 Cygwin 允许您执行名为 helloworld.exe
的文件通过输入 ./helloworld.exe
或./helloworld
。 (这甚至适用于其他操作; ls -l helloworld
将向您显示有关 helloworld.exe
的信息 - 假设不存在仅名为 helloworld
的文件。)
在这种情况下,根据您在评论中提供的信息,您的当前目录中显然有两个可执行文件 helloworld.exe
和helloworld
.
我不是 100% 确定 Cygwin 在这种情况下会做什么,但解决方案是删除 helloworld
文件并确保您的可执行文件具有所需的 .exe
扩大。 Cygwin 编译器默认会为您执行此操作;即使你运行
g++ helloworld.cpp -o helloworld
它将生成一个名为helloworld.exe
的可执行文件.
我不知道你做了什么来创建一个没有 .exe
的可执行文件扩大。不管是什么,不要再这样做了。
关于linux - Cygwin g++ 不允许在 Windows 8 上使用 ./file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23501881/