在Cygwin和Linux下由g ++创建的可执行文件的默认文件扩展名

时间:2008-12-11 15:26:50

标签: c++ compiler-construction cygwin g++ portability

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

提前致谢!

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

8 个答案:

答案 0 :(得分:18)

这很简单:在UNIX上,you don't need no steenkin' extensions。实际上,像.c这样的“扩展”只是一种方便的命名约定;与Windows不同,文件系统将文件名视为一个字符串,.c和所有。

对于真正的好时机,编译一个没有-o标志的C程序。您的可执行文件仍会显示---命名为可执行文件的默认名称:a.out

答案 1 :(得分:12)

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

答案 2 :(得分:6)

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

答案 3 :(得分:3)

如果您想知道如何在UNIX上执行程序,只需导航到包含您要执行的程序的文件夹(aprogram)并输入

./aprogram

这将告诉shell你想在当前目录中执行'aprogram'。

答案 4 :(得分:3)

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

cat.bin file.txt | less.bin

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

答案 5 :(得分:2)

如果您希望输出具有.exe扩展名,则只需使用-o标志(例如-o aprogram.exe)。无论如何,它都可以在linux下运行。

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

答案 6 :(得分:1)

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

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

答案 7 :(得分:1)

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

$ file MyFile

这将告诉你文件的内容是什么,你可以这样选择一个名字,但这不是必要的 - 如果你已经习惯了延长所有生命的话,那就是化妆品。