2013-12-16 6 views
9

का उपयोग करके संकलित, मेरे पास 3 कंप्यूटर हैं, जिनमें से दो विंडोज 8 का उपयोग करते हैं। मिनजीडब्ल्यू के जी ++ (4.8.1-4) के नवीनतम संस्करण का उपयोग करके मेरा हैलो वर्ल्ड प्रोग्राम फ्रीज करता है जब भी मैं संकलित करता हूं और चलाता हूं विंडोज 8 कंप्यूटर पर नहीं बल्कि में Windows 7.std :: endl क्रैश विंडोज 8, MinGW

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

इस ग्राम में ठीक संकलित ++ लेकिन a.exe चल प्रदर्शित करेगा "नमस्कार, दुनिया!" तो एक खिड़की खुल जाएगी और कहें "ए.एक्सई ने काम करना बंद कर दिया है, विंडोज प्रोग्राम के समाधान के लिए ऑनलाइन जांच सकते हैं ...." आदि

क्या किसी ने इस समस्या को देखा है।

इसके अलावा, मैं करने की कोशिश की "std :: अदालत < <" नमस्कार, दुनिया \ N! "< < std :: फ्लश," और यह एक ही समस्या है। ऐसा लगता है कि बफर को फिसलने वाला हर कार्य एक दुर्घटना का कारण बनता है।

एरिक की सलाह के बाद, मैं इस कार्यक्रम फिर कंपाइल और gdb में यह भाग गया और निम्न उत्पादन मिल गया:

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

डीबगर के तहत चलने का प्रयास करें; यह कम से कम आपको बताएगा कि विफलता कहां है। –

+0

ठीक है, मैंने जीडीबी चलाया और कहा "कार्यक्रम सिग्नल सिग्नल, अवैध निर्देश प्राप्त हुआ। 0x00405065 _Jv_RegisterClasses()" – user1276560

+2

में मुझे लगता है कि सबसे संभावित कारण यह है कि मानक सी ++ लाइब्रेरी कुछ रन-टाइम के असंगत संस्करण के साथ संकलित है लोड लाइब्रेरी, कुछ मौलिक पुस्तकालय की तरह। –

उत्तर

6

दूसरा उदाहरण में, '\ n' किसी भी मामले में एक निर्गम फ्लश का कारण होना चाहिए, हालांकि विंडोज़ में मेरा मानना ​​है कि कंसोल आउटपुट तत्काल फ्लैश के बिना किसी भी मामले में तत्काल (या शायद थोड़े समय के बाद स्वचालित) है।

मैं निम्नलिखित प्रयोगों का सुझाव:

1) अगर यह सी पुस्तकालय (MinGW माइक्रोसॉफ्ट के सी क्रम में उपयोग करके सी ++ पुस्तकालय के लिए विशिष्ट है glibc के बजाय प्रयोग किया जाता है) देखें:

#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, के रूप में या सुझाव के रूप में here अलग संकलक विकल्प: हालांकि मैं `शक` स्थैतिक-libgcc` ही कोई असर के बाद से MinGW माइक्रोसॉफ्ट के सी क्रम DLL का उपयोग करता होगा -static-libgcc -static-libstdc++ (और स्थिर पुस्तकालय केवल माइक्रोसॉफ्ट के उपकरणों के साथ उपलब्ध है)।

+2

यह काम किया। आप सही थे -स्टैटिक-libgcc ध्वज मदद नहीं कर रहे थे; केवल -स्टैटिक-libstdC++ ध्वज समस्या को हल करने में सक्षम था। इसके अलावा, -फनो-बिल्टिन ने इसे ठीक नहीं किया। मैं एक काफी अनुभवी पायथन प्रोग्रामर हूं लेकिन जाहिर है कि मैं अभी सी ++ सीख रहा हूं। क्या आप इस बात का अनुमान लगाएंगे कि इस समस्या को हल करने के लिए वास्तव में इस कंपाइलर ध्वज ने क्या किया? – user1276560

+2

@ user1276560: '-static-libstdC++' के बिना मानक सी ++ लाइब्रेरी एक स्थिर रूप से लिंक्ड लाइब्रेरी की बजाय * गतिशील लिंक लाइब्रेरी * द्वारा प्रदान की जाएगी। संभवतः उस लाइब्रेरी के मिनजीडब्ल्यू निर्माण में कुछ असंगतता है, जो स्थिर पुस्तकालय निर्माण में मौजूद नहीं है। आप पाते हैं कि परिणामस्वरूप आपका निष्पादन योग्य थोड़ा बड़ा है, लेकिन प्लस तरफ, यह सुनिश्चित करने के बिना कि डीएलएल इसके साथ वितरित किया गया हो, फिर से वितरित किया जा सकेगा। – Clifford

+0

मेरे मामले में यदि मैं उपयोगकर्ता से स्ट्रिंग प्राप्त करने के लिए 'char * str' जैसे पॉइंटर्स का उपयोग कर रहा हूं तो क्रैश का मुद्दा होने पर अन्यथा यदि सरणी का आकार ठीक हो गया है तो यह ठीक काम कर रहा है। क्या उसके लिए आपके द्वारा मेरी मदद की जाएगी। – viveksinghggits

0

मुझे एक ही समस्या थी और एक लंबे दर्दनाक खोज के बाद पाया गया कि मेरे पास mingw के कई संस्करण थे जो मेरे कंप्यूटर पर libstdC++ - 6.dll प्रदान करते थे। एक mingw स्थापना का हिस्सा था अन्य दूसरों को अन्य स्थापना पैकेज (gnuplot और जीआईएमपी) का हिस्सा थे। चूंकि मेरे पास मेरे पाथ में gnuplot था संकलित mingw exe यह इस डीएल के पुराने, असंगत संस्करण का उपयोग करेगा और वर्णित लक्षणों के साथ दुर्घटनाग्रस्त होगा। इसलिए, मैं डायतरमार कुहल के संदेह की पुष्टि कर सकता हूं। जैसा कि लाइब्रेरी को जोड़ने से ऊपर बताया गया है, स्पष्ट रूप से स्पष्ट रूप से इस मामले में मदद करता है क्योंकि पुस्तकालय कार्यों को संकलन समय पर exe में शामिल किया गया है।

+0

यह उत्तर नहीं है। प्रश्न का उत्तर 3 साल पहले दिया गया था, तो आपने एक उत्तर क्यों पोस्ट किया जिसे आप जानते हैं समस्या को हल नहीं करते? –