web-dev-qa-db-ja.com

cygwinのg ++​​ C ++コンパイラを使用する

初めての「HelloWorld!」を実行しようとしています。 C++で。 Windows XPを使用していて、g ++ C++コンパイラがインストールされているcygwinをインストールしました。小さな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\specsgccバージョンegcs-2.91.5719980901(egcs-1.1リリース)

Binディレクトリには、g ++。exeとgcc.exeの両方があります。上記の「gcc」が「g ++」ではなく「gcc」になる理由がわかりません。これがどれほど重要かはわかりませんが、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シェルでプログラムをコンパイルしようとすると次のようになります。

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
8
user42155

人々が言っ​​ているように、パスを確認してください。 cygwin DLLのコピーを開始しないでください。これは必要ありません。後で問題が発生する可能性があり、問題を解決できません。

そして、Windows PATH変数(およびその他)の設定に関しては、 この小さなプログラム は非常に便利で、MSコントロールパネルアプレットで目を細めるよりも優れていることがわかりました。

編集:OPが誤ってg ++をインストールしなかったようです-最初に明白な質問をすることで答えた私たち全員のためのレッスン:-)

3
anon

ああ、cygwinをインストールするとg ++がインストールされると思いました。ですから、その場合は実際に最初にg ++をインストールする必要がありますね。

(そして再起動します)

3
user42155

G ++をインストールしてもよろしいですか? G ++はC++コンパイラであり、Cコンパイラではありません。 Cコンパイラのみをインストールした場合、コマンドgccはありますが、コマンドg ++はありません。

2
Milan Babuškov

ここではWindowsシェルを使用していると想定しています。 cygwin Bash Shellからコンパイラーを呼び出す場合は、すべてのパスを設定する必要があります。

2
Francis Beaudet

私は数年前にこれについてのチュートリアルを書きました、それは役立つかもしれません:

http://www.codeguru.com/cpp/misc/misc/compilerandpre-compiler/print.php/c8107__1/

G ++をインストールしましたか? Cygwinインストーラーのデフォルト設定ではインストールされません。

2

パス上にあること、またはbash Shell cmdPromptを実行していることを確認してください。

2
sfossen

それらがc:\ cygwin\binがPATHにあることを確認してください。

それが役に立てば幸い。

1
Sasha

Cygwinでパスを取得するには:

echo $PATH

これにより、問題を理解するための道を歩むことができます。

編集

次のコマンドは、cygwinがWindows内のすべてのファイルを検索する必要があると考える場所を示します

mount

/ usr/binを含む行は、コピーが必要な行です。

1
RobS

dosShellを起動します。

cd c:\ cygwin\bin

c ++またはcppと入力します

または、ディレクトリコマンドを実行して内容を確認します。 cppまたはc ++を探します。

それらがない場合は、ダウンロードしていません。

1
Jack BeNimble

パスに追加する(問題を修正する)ことに加えて、makeとdbgをダウンロードすることもできます。これらも開発パスにありますが、デフォルトではチェックされていません。すべてを再ダウンロードしないように、全体的なインストールオプションとして「保持」を選択してください。

0
Jack BeNimble

他の人が述べているように、これはおそらくパスの問題であるため、環境変数PATHを確認する必要があります。これを行うには、My Computerを右クリックし、[プロパティ]をクリックします。 [詳細設定]タブに移動し、[環境変数]ボタンをクリックします。ここから、言及したパスがPATH変数に含まれているかどうかを確認します。そうでない場合は、そこに表示されているのと同じ構文を使用してパスを分離するためにそれらを追加します(パス間のセミコロンまたはコロンだと思います)。

編集:ああ、あなたはすでにこれを行っているようです(私の投稿をほんの数秒で打ち負かしてください)。今あなたがする必要があるのは再起動だけだと思います。

0
Scottie T