11

そのため、私は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カタログにリストされているバイナリの最新バージョンにエラーがあります。

4

1 に答える 1

4

私は非常によく似た問題に遭遇しました。リリース ビルドは問題なく、デバッグ ビルドは壊れていました。解決策は、次のことを実行することでした。

mingw-get update
mingw-get upgrade
mingw-get install gcc g++ mingw32-make --reinstall

これはダブルキルだったかもしれませんが、少なくとも「アップグレード」で以前のライブラリを削除できなかった場合にさえ役立ちました。

于 2012-08-17T07:27:31.403 に答える