9

我在 VisualStudio 上完成了大部分工作,但对 gcc 或 g++ 没有太多经验。今天早上,当我尝试使用 cygwin 在我的电脑上编译(例如 aprogram.cpp)时,当我尝试在我的 Ubuntu 机器上编译相同的东西时,我得到了(aprogram.exe),我得到了(aprogram),没有任何扩展. 我只是想知道是否有人好心告诉我原因。这个问题只是出于好奇。:)

提前致谢!

编辑:(来自 Jimmy 的评论)Cygwin 下的 g++ 默认为 .exe

4

8 回答 8

18

这很简单:在 UNIX 上,您不需要任何 steenkin 扩展。事实上,像 .c 这样的“扩展名”只是一种方便的命名约定;与 Windows 不同,文件系统将文件名视为一个字符串、.c 和所有。

在一段非常-o好的时间里,编译一个完全没有标志的 C 程序。您的可执行文件仍将显示 --- 命名为可执行文件的默认名称:a.out.

于 2008-12-11T15:30:10.933 回答
13

这只是一个命名约定。在 Unix/Linux 上,可执行文件没有扩展名,只有一个可执行位。

于 2008-12-11T15:29:31.433 回答
7

.exe 是 Windows 的东西。Unix 不关心扩展。可执行性基于文件的元数据以及文件的内容。通过 cygwin 的 g++ 并不是真正的 Windows 应用程序,因此它带有它的 unix 根源。

于 2008-12-11T15:28:44.307 回答
4

如果您想知道如何在 UNIX 上执行该程序,只需导航到您希望执行的程序所在的文件夹(aprogram)并键入

./aprogram

这将告诉 shell 您希望在当前目录中执行“aprogram”。

于 2008-12-11T15:33:13.237 回答
4

可执行文件在 unix 世界中没有扩展名,因为它们旨在在 shell 中执行。想象一下:

cat.bin file.txt | less.bin

太丑了!Unix 在每个文件的开头使用所谓的魔术字节来检测文件类型。对于称为 ELF 的默认二进制格式,7f 45 4c 46开头有一个 4 字节的字。这对所有文件格式都是不可能的。考虑 C 代码或 Java 代码。它们都可以从注释开始,并且可以看起来完全相同。因此,您仍然必须使用文件扩展名,并且在适当的地方使用它是一件好事。

于 2009-01-05T00:31:44.837 回答
2

如果您希望输出具有 .exe 扩展名,那么只需使用 -o 标志即可(例如 -o aprogram.exe)。无论哪种方式,它都可以在 linux 下正常工作。

在 linux 下执行程序的能力取决于文件的权限(请参阅chmod)。执行权限将由 gcc/g++ 自动设置。

于 2008-12-11T15:40:32.190 回答
1

ls /bin 有很多程序,而且都没有扩展名:)

ls -l /bin 你会看到它们都有 +x 标志来将它们标记为可执行文件。

于 2009-01-05T01:18:05.930 回答
1

老实说,只是命名它们.elf。如果您不确定它们是什么文件类型,请执行:

$ file MyFile

这将告诉您文件的内容是什么,并且您可以通过这种方式选择一个名称,但这不是必需的 - 如果您已经习惯于扩展所有生命,则只是装饰性的。

于 2012-08-13T19:56:00.640 回答