2012-08-15 32 views
11

क्रैश करता है इसलिए मैं मिनीजीडब्ल्यू जीसीसी संस्करण 4.4 या थोड़ी देर का उपयोग कर रहा हूं, और यह तय करने का समय तय कर चुका है। मैं MinGW वेबसाइट पर गया और जीसीसी (4.7.0) का नवीनतम संस्करण डाउनलोड किया।सरल प्रोग्राम

मेरे पिछले संस्करण को हटाने और नवीनतम संस्करण स्थापित करने के बाद भी, सबसे सरल प्रोग्राम क्रैश हो जाएगा। उदाहरण के लिए, अगर मैं इस कार्यक्रम

#include <iostream> 

using namespace std; 

int main() { 
    cout << "Hello, World" << endl; 

    return 0; 
} 

कमांड लाइन

g++ hello.cpp -o hello.exe 

यह पता प्रिंट होगा "नमस्ते, दुनिया" और फिर दुर्घटना के साथ संकलन। हालांकि, अगर मैं इसे निम्न आदेश लाइन के साथ संकलन:

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) के बिना, यह प्रिंट "एक स्ट्रिंग दर्ज करें:" इससे पहले कि दुर्घटना होगा हालांकि, , कोड अनुकूलन लाइन के साथ, यह एक स्ट्रिंग दर्ज करने के बाद दुर्घटनाग्रस्त हो जाता है।

अब, आखिर में मेरे प्रश्न पर। इसे ठीक करने के लिए मैं क्या कर सकता हूं, क्या मुझे इसका उपयोग करने के लिए बस जीसीसी के पिछले संस्करण पर वापस जाना होगा? साथ ही, जीसीसी एक साधारण कार्यक्रम को सही तरीके से संकलित क्यों नहीं करेगा?


अद्यतन: त्रुटि, जीसीसी स्थापना की वजह से किया गया था जब MinGW इंस्टालर के साथ स्थापित करने, और विकल्प "नवीनतम भंडार सूची डाउनलोड" करने के लिए, यह त्रुटि पुन: पेश हैं चुनने। हालांकि, अगर मैंने एक ही इंस्टॉलर का उपयोग किया और "प्री-पैकेड रिपोजिटरी कैटलॉग का उपयोग करें" चुना है, तो त्रुटि अब मौजूद नहीं है। तो MinGW GCC कैटलॉग में सूचीबद्ध बाइनरी के नवीनतम संस्करण में कुछ त्रुटि है।

+8

लगता है जैसे आप अपनी डीबगिंग लाइब्रेरी को बोर्क करते हैं। तथ्य यह है कि ऑप्टिमाइज़ेशन समस्या हल करता है इसका मतलब है कि रिलीज रन-टाइम पुस्तकालय ठीक हैं। लेकिन डीबग रन-टाइम पुस्तकालय किसी भी तरह गलत तरीके से गलत हैं। – Mysticial

+0

लेकिन उन्होंने कहा कि यह ऑप्टिमाइज़ेशन सक्षम के साथ दुर्घटनाग्रस्त है। –

+0

तो शायद जीसीसी स्थापना के साथ कुछ गलत हो गया, संभावित रूप से कुछ भ्रष्ट हो गया? मैं इसे फिर से लोड कर दूंगा और यह देखने के लिए इसे पुनर्स्थापित करूँगा कि यह कुछ भी ठीक करता है या नहीं। – Alex

उत्तर

4

मैं बहुत ही समान समस्या में भाग गया हूं, जहां एक रिलीज बिल्ड ठीक था और एक डीबग बिल्ड टूट गया था। समाधान निम्नलिखित perorm था:

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

यह एक डबल मारने गया हो सकता है, लेकिन कम से कम यह भी जब "अपग्रेड" पिछले कुछ पुस्तकालयों को नहीं निकाल सका मदद की।

+0

मैंने ऐसा करने का प्रयास किया, जीसीसी के नवीनतम संस्करण को फिर से लोड किया, और अपडेट करने के लिए उन तीन आदेशों में प्रवेश किया, अपग्रेड करें, और पुनः इंस्टॉल करें। हालांकि, यह अभी भी एक प्रोग्राम तैयार करेगा जो दुर्घटनाग्रस्त हो जाएगा। अब तक, मैं इसे काम करने में सक्षम हूं, "प्री-पैकेड रिपोजिटरी कैटलॉग" का उपयोग करने का एकमात्र तरीका है, जिसके कारण जीसीसी 4.6.2 को 4.7.0 के बजाय स्थापित किया जा सकता है। – Alex

संबंधित मुद्दे