そのため、私はMinGW GCCバージョン4.4をしばらく使用していて、アップグレードするときが来たと判断しました。MinGW Webサイトにアクセスし、最新バージョンのGCC(4.7.0)をダウンロードしました。
以前のバージョンを削除して最新バージョンをインストールすると、最も単純なプログラムでもクラッシュします。たとえば、このプログラムをコンパイルすると
#include <iostream>
using namespace std;
int main () {
cout << "Hello, World" << endl;
return 0;
}
コマンドラインで
g++ hello.cpp -o hello.exe
「Hello、World」が出力されてからクラッシュします。ただし、次のコマンドラインでコンパイルすると、次のようになります。
g++ -O3 hello.cpp -o hello.exe
まったくクラッシュすることなく、完全に正常に動作します。
ここで、入力プログラムを変更して、もう少し複雑にすると、次のようになります。
#include <iostream>
#include <string>
using namespace std;
int main () {
string str;
cout << "Enter a string: ";
getline (cin, str);
if (str == "foo")
cout << "You entered foo!" << endl;
else
cout << "You entered: " << str;
return 0;
}
最適化オプション(-O3)がないと、「文字列を入力してください:」を出力する前にクラッシュしますが、コード最適化行を使用すると、文字列を入力した後にクラッシュします。
さて、最後に私の質問に。これを修正するにはどうすればよいですか?使用するには、以前のバージョンのGCCに戻す必要がありますか?また、GCCが単純なプログラムを正しくコンパイルしないのはなぜですか?
更新:エラーはGCCのインストールが原因で発生しました。MinGWインストーラーを使用してインストールし、「最新のリポジトリカタログをダウンロードする」オプションを選択すると、エラーが再現されます。ただし、同じインストーラーを使用して「事前にパッケージ化されたリポジトリカタログを使用する」を選択した場合、エラーは発生しなくなりました。そのため、MinGWGCCカタログにリストされているバイナリの最新バージョンにエラーがあります。