2013-04-16 33 views
1

我在計算機中的cout命令中有這個問題。我使用MingW和Netbeans來學習C++。我試圖用下面的代碼編譯和運行一個程序。輸出整數時C++程序異常退出

#include <iostream> 

int main(){ 
    int x = 5; 
    int y = 7; 
    std::cout << std::endl; 
    std::cout << x + y << " " << x * y; 
    std::cout << std::endl; 
    return 0; 
} 

這段代碼保存爲xycalculation.cpp和使用我的Windows XP SP2的計算機上的命令g++ -o xycalc.exe xycalculation.cpp編譯它。 我在PATH中設置了這個環境變量。 C:\ WINDOWS \ system32; C:\ WINDOWS; C:\ WINDOWS \ System32 \ Wbem; D:\ Qt \ Qt5.0.1 \ 5.0.1 \ mingw47_32 \ bin; D:\ MinGW \ bin; D:\ MinGW \ msys \ 1.0 \ bin

此代碼編譯良好並創建xycalc.exe文件。當我嘗試通過xycalc.exe通過命令行運行它時,它給了我一個Windows錯誤消息並退出時沒有給出任何輸出。

錯誤的詳細信息如下圖所示,當我點擊'有關此錯誤的更多信息,請單擊此處'鏈接如下。

AppName: xycalculation.exe AppVer: 0.0.0.0  ModName: libstdc++-6.dll 
ModVer: 0.0.0.0 Offset: 000952a0 

任何人都可以給我解決這個問題的方向嗎?,這對我繼續學習這門語言會有很大的幫助。

在此先感謝。

+2

我沒有看到任何錯誤的代碼。 – chris

+0

編譯並運行正常(在Mac OS上使用'g ++')。 – Floris

回答

1

-static-libgcc-static-libstdc++添加到您的命令行以靜態鏈接libs或將它們放在與exe相同的文件夾中。

+0

非常感謝。 哇!它做了這件事。但是我必須在每次編譯源代碼時設置'-static-libgcc'和-'static-libstdC++'命令嗎? 再次感謝。 – isu3ru

+0

我的MingW版本中有任何配置錯誤嗎? – isu3ru

+0

'D:\ MinGW \ lib'中的庫是否?嘗試將其添加到PATH而不是靜態鏈接。對Jesse Good: –

1

你得到這個錯誤的原因是因爲默認情況下你的編譯器不會將libstdc++編譯到你的程序中。

我使用的是代碼塊,但是您可以通過使用MinGW編譯器並嘗試在控制檯中的代碼塊之外運行程序來複制錯誤。

要解決這個問題,你應該補充:

-static-libgcc (C) 
-static-libstdc++ (C++) 

您連接標誌將編譯庫到您的EXE(EXE大,但它會運行)。

+0

有沒有辦法只鏈接一個較小的子集?這會產生超過1MB的Hello World! – Allen

+0

@艾倫嗯我敢肯定,如果你做了一個自定義庫只有你需要你可能能夠。但我從未嘗試過這樣的事情。 – Serdalis

+0

奇怪的是,我一直在玩簡單的「你好,世界!」程序。無論是否使用「-static-libstdC++」,輸出.exe都需要libgcc_s_dw2-1.dll存在,否則會引發錯誤。如果我使用「-static-libstdC++」,則.exe會變得很大,但如果該.dll不存在,仍然不會運行。 – Allen