私はMinGW GCCバージョン4.4以降を使用していて、アップグレードすることに決めました。私はMinGWのウェブサイトに行き、最新バージョンのGCC(4.7.0)をダウンロードしました。簡単なプログラムのクラッシュ
私の前のバージョンを削除して最新のバージョンをインストールした後、最も単純なプログラムでもクラッシュします。例えば、私は、コマンドラインそれは「こんにちは、世界」をプリントアウトして、クラッシュします
g++ hello.cpp -o hello.exe
でこのプログラム
#include <iostream>
using namespace std;
int main() {
cout << "Hello, World" << endl;
return 0;
}
をコンパイルした場合。しかし、私は次のコマンドラインでコンパイルすると:
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が簡単なプログラムを正しくコンパイルしないのでしょうか?
更新:エラーがMinGWのインストーラを使ってインストールする場合は、GCCのインストールによって引き起こされ、「最新のリポジトリカタログをダウンロードする」オプションを選択して、それがエラーを再現します。しかし、同じインストーラーを使用し、「あらかじめパッケージ化されたリポジトリー・カタログを使用する」を選択した場合、エラーは存在しなくなります。したがって、MinGW GCCカタログにリストされているバイナリの最新バージョンには何らかのエラーがあります。
あなたのデバッグ用ライブラリをボークしたような音です。最適化が問題を「解決」するという事実は、リリースランタイムライブラリが問題ないことを意味します。しかし、デバッグランタイムライブラリは何らかの形で誤って構成されています。 – Mysticial
しかし、彼は最適化を有効にしてクラッシュすると言った。 –
GCCのインストールに何か問題があったとしたら、何かが壊れている可能性がありますか?それを修正するかどうかを確認するために再インストールして再インストールします。 – Alex