10

私は 3 台のコンピューターを持っており、そのうちの 2 台は Windows 8 を使用しています。MinGW の g++ (4.8.1-4) の最新バージョンを使用すると、Windows 8 コンピューターでコンパイルして実行すると、Windows 7 ではなく、hello world プログラムがフリーズします。

#include <iostream>
int main()
{
    std::cout << "Hello, World!" <<std::endl;
    return 0;
}

これは g++ で問題なくコンパイルされますが、a.exe を実行すると "Hello, World!" が表示されます。ウィンドウがポップアップし、「a.exe が動作を停止しました。Windows はオンラインでプログラムの解決策を確認できます....」などと表示されます。

誰もこの問題を見たことがありますか。

また、「std::cout << "Hello, World!\n" << std::flush;」を試しました。これには同じ問題があります。バッファをフラッシュするすべての関数がクラッシュを引き起こすようです。

Eric のアドバイスに従い、プログラムを再コンパイルして gdb で実行したところ、次の出力が得られました。

Program received signal SIGILL, Illegal instruction. 
0x00405065 in _Jv_RegisterClasses ()
4

2 に答える 2

6

2 番目のインスタンスでは、'\n' はいずれの場合でも出力フラッシュを引き起こすはずですが、Windows では、明示的なフラッシュがなくてもコンソール出力は即時 (または短いタイムアウト後におそらく自動) であると考えています。

次の実験を提案します。

1) C ライブラリを使用して、C++ ライブラリに固有のものかどうかを確認します (MinGW では、glibc ではなく Microsoft の C ランタイムが使用されます)。

#include <stdio.h>
int main()
{
    printf( "Hello, World!\n" ) ;
    return 0;
}

2) 次の方法で終了コードを削除します。

int main()
{
    return 0;
}

3) 改行なし:

#include <iostream>
int main()
{
    std::cout << "Hello, World! ;
    return 0;
}

4) 最適化レベルなどのさまざまなコンパイラ オプションを試してみてください。-fno-builtinたとえば、ここで提案されているように: -static-libgcc -static-libstdc++Microsoft のツールを使用)。

于 2013-12-16T22:45:28.053 に答える