使用Cygwin中的g++ C++编译器

8
我正在尝试在C++中执行我的第一个“Hello World!”程序。我正在使用Windows XP,并安装了cygwin,其中包含g++ C++编译器。我编写了一个小的hello-world程序,并将其保存在hello.cpp中。从命令提示符中,我输入:

g++ hello.cpp

但是我得到了以下错误信息:

'g++'不是内部或外部命令,也不是可运行的程序或批处理文件。

我已经在D:\programs\cygwin中安装了cygwin。我另外创建了一个目录D:\cpp,其中包含我的hello-world文件。我的安装或路径似乎有问题,但我无法弄清楚。我运行了cygwin的exe文件,在安装目录中我得到了所有必要的文件,例如bin文件夹、lib、Cygwin.bat等。
我读到说如果出现这样的错误消息,我应该检查cygwin1.dll文件是否复制到Windows的主文件夹中。这是指C:\WINDOWS目录吗?我看了一下,那里没有这个文件。我在cygwin的bin文件夹中有cygwin1.dll文件:D:\programs\cygwin\bin。此外,我如何检查bin文件夹(D:\programs\cygwin\bin)是否被视为命令搜索路径中的一部分?
我认为hello-world程序不应该包含任何语法错误,我只是复制了它。当我输入:

g++ -v

时,我得到相同的错误消息:命令未被识别。如果有人能给我一些提示,我将不胜感激。谢谢。
以下是hello-world程序的代码:
#include <iostream>
using namespace std;

int main() {
  cout <<"Hello World!"<<endl;
  return 0;
}

我已经安装了g++,现在当我输入g++ -v时,会得到以下输出:从\d\cygnus\cygwin-b20\H-i586-cygwin32\bin..\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\specs读取规范的版本是 egcs-2.91.57 19980901 (egcs-1.1 release)。
在bin目录中,我有g++.exe和gcc.exe。我不明白为什么上面的输出是“gcc”而不是“g++”。我不知道这有多重要,但是在DOS命令提示符中尝试编译程序时会收到错误消息:
g++ hello.cpp 我得到以下输出:
hello.cpp:1: parse error before character 0357
hello.cpp: In function 'int main()':
hello.cpp:'cout' undeclared (first use this function)
hello.cpp: (Each undeclared identifier is reported only once
hello.cpp: for each function it appears in.)
hello.cpp: 'endl' undeclared (first use this function)

当我尝试在cygwin shell中编译该程序时,我得到了以下结果:

hello.cpp:1: parse error before character 0357
hello.cpp: In function 'int main()':
hello.cpp:'cout' undeclared (first use this function)
hello.cpp: (Each undeclared identifier is reported only once
hello.cpp: for each function it appears in.)
hello.cpp: 'endl' undeclared (first use this function)
g++.exe: hello.cpp: No such file or directory
g++.exe: No input files
g++.exe: hello.cpp: No such file or directory
g++.exe: No input files
g++.exe: hello.cpp: No such file or directory
g++.exe: No input files
g++.exe: hello.cpp: No such file or directory
g++.exe: No input files
g++.exe: hello.cpp: No such file or directory
g++.exe: No input files
12个回答

3
人们已经说过了,检查路径。不要开始复制cygwin DLL文件-这是不必要的,可能会在以后引起问题,而且不会解决问题。当涉及到设置Windows PATH变量(和其他变量)时,我发现这个小程序比盯着MS控制面板更有用:http://www.rapidee.com/en/about
编辑:看起来OP错误地没有安装g++ - 这是给我们所有人的一个教训,首先问明显的问题。

你可以通过以下命令在Windows注册表中永久设置PATH:setx PATH c:/cygwin64/bin;%PATH% -m(在注册表中),以及在当前shell中设置PATH=c:/cygwin64/bin;%PATH%。 - mosh

3

啊,我一直以为在安装cygwin时已经安装了g++。那么,在这种情况下,我应该先安装g++,对吗?

(然后重新启动)


宾果——不确定是否需要重新启动。 - JohnMcG
Cygwin安装程序提供了大量的软件包供您选择,确保您在其中选择了g++。 - reinierpost

2

我假设你在使用Windows Shell。如果你从cygwin Bash shell调用编译器,所有路径应该已经为你设置好了。


2

请在此处分享并链接源代码。 - 0x6900
很棒的教程。正是我所需要的。 - user3311142

2

请确保它在路径上或者您正在运行bash shell cmd提示符。


2

你确定已经安装了g++吗? g++是C++编译器而不是C编译器。如果你只安装了C编译器,那么你将拥有gcc命令,但没有g++命令。


1

确保c:\cygwin\bin出现在PATH环境变量中。

希望有所帮助。


1

获取在cygwin中的路径:

echo $PATH

这将帮助我们开始理解问题所在。

编辑:

下一个命令将告诉我们cygwin认为在Windows中应该在哪里查找所有这些文件。

mount

包含 /usr/bin 的那一行是我们需要复制的。


我如何复制Shell中的结果?它非常长,我想应该有一种方法,但我无法从Shell中复制任何内容。如果没有办法,我将尝试在此处编写它(总共10行)。 - user42155
我已经将 D:\programs\cygwin\bin 放入控制面板 --> 系统 --> ... --> 环境变量中的路径中。这是设置路径的正确方式吗? - user42155
尝试执行以下命令:echo $PATH > mypathfile.txt 然后在Wordpad或其他文本编辑器中打开mypathfile.txt文件以复制它。 - RobS
你有多行输出的事实表明你正在cygwin中运行该命令,这是一个好的开始。 - RobS
谢谢,我已经将输出保存在mypathfile.txt文件中,并将其粘贴在下面。 - user42155

1

打开 DOS shell。

cd c:\cygwin\bin

键入 c++ 或 cpp。

或者执行目录命令查看内容。查找 cpp 或 c++。

如果它们不存在,则表示您尚未下载它们。


0
除了将其添加到路径中(这将解决您的问题),您可能还想下载 make 和 dbg,它们也在开发路径上,但默认情况下未被选中。确保选择“保留”作为整体安装选项,以便它不会重新下载所有内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接