我刚刚在运行Windows 7的新Windows机器上安装了cygwin,当我编译c ++程序时,我的行为很有趣。这是我输入的内容:
g++ test.gpp -o test
在我的其他Windows机器上,这会创建一个exe文件test.exe,它当然是一个可执行文件。但是在此安装上,将创建文件测试。令我惊讶的是,它不是可执行文件,而是看起来像一个调试文件(在ascii printables中)。如果我改为输入:
g++ test.gpp -o test.exe
然后我得到了可执行的test.exe。 (1)为什么在我的所有其他实现中,我获得可执行文件,但不是最近的尝试? (2)我为什么关心?好吧,我也在Linux机器上工作,我不习惯输入扩展名“.exe”。 (我讨厌非Linux文件的那个方面!)我猜我可以设置某种一次性标志,使g ++创建的默认文件是.exe文件。
这个问题的问题在于你们没有人能够重现它! (我不能在我的其他机器上!)
答案 0 :(得分:3)
据我所知,g++
无法识别.gpp
扩展名。将文件从test.gpp
重命名为test.cpp
,然后重试。
在我的Cygwin系统上,g++ test.gpp
给出了一条错误消息:
... file format not recognized; treating as linker script ...
Cygwin编译器会创建一个.exe
扩展名的可执行文件(因为Windows需要它),但它也允许您引用没有后缀的此类文件。所以,例如:
ls -l test.exe
和
ls -l test
应该都显示相同的文件。 (如果你碰巧有两个名字的文件,事情可能会有点混乱 - 所以不要这样做。)g++
的{{1}}选项也特别对待-s
后缀,因此.exe
和-o test
应该做同样的事情。
我不知道为什么你会看到你描述的行为。也许你碰巧在-o test.exe
中看起来像一个有效的链接描述文件?
答案 1 :(得分:0)
g++ test.gpp -o test
这应该创建一个名为test的文件(没有扩展名)。如果创建该文件而不是使用chmod +x test
而不是使用./test
来运行它。看看它是否有效。