我完成了大部分关于VisualStudio的工作,并且对gcc或g ++没有多少经验。当我今天早上在我的电脑上使用cygwin编译(例如aprogram.cpp)时,我得到了(aprogram.exe)当我尝试在我的Ubuntu盒子上编译相同的东西时我得到了(aprogram)没有任何扩展名。我只是想知道是否有人能够告诉我原因。这个问题只是出于好奇。 :)
提前致谢!
编辑: (来自吉米的评论) Cygwin下的g ++默认为.exe
答案 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
这将告诉你文件的内容是什么,你可以这样选择一个名字,但这不是必要的 - 如果你已经习惯了延长所有生命的话,那就是化妆品。