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

标签 linux g++ cygwin

当我在 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.exehelloworld .

我不是 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/

相关文章:

compiler-errors - 编译器错误堆栈跟踪

hadoop-1.2.1 中缺少 eclipse 插件

python - 如何正确地为以下 Python 脚本提供参数

linux - 如何从 bash shell 脚本中的数组中删除某个字段?

php - RedHat 7 错误 => 需要 : libcrypto. so.10

c++ - g++ 不生成任何文件或提供任何输出

c++ - 'dummy' 可以在未初始化的情况下使用

regex - Bash - 如何计算指令数?

linux - 如何使用 linux find 命令清理所有 Maven 项目?

linux - 如何使用 Cygwin 在 Expect 脚本中配置超时?