कार्यक्रम शुरू नहीं हो सकता क्योंकि libgcc_s_dw2-1.dll गायब है


166

मैंने कोड :: ब्लॉक के साथ C ++ में एक सरल प्रोग्राम बनाया है।

अगर मैं इसे कोड :: ब्लॉक से चलाता हूं, तो यह सही ढंग से काम करता है; लेकिन अगर मैं इसे निष्पादन योग्य फ़ाइल पर डबल क्लिक करके चलाता हूं, तो इस संदेश के साथ एक विंडो पॉप अप होती है:

कार्यक्रम शुरू नहीं हो सकता क्योंकि libgcc_s_dw2-1.dll आपके कंप्यूटर से गायब है।
इस समस्या को ठीक करने के लिए प्रोग्राम को पुन: स्थापित करने का प्रयास करें।

तो समस्या क्या है? इसे ठीक करने के लिए मुझे क्या करना होगा?

जवाबों:


196

मेरा मानना ​​है कि यह एक Microsoft Visual Studio सेटअप के बजाय एक MinGW / gcc संकलक समस्या है।

libgcc_s_dw2-1.dllसंकलक के बिन निर्देशिका में होना चाहिए। आप इस निर्देशिका को रनटाइम लिंकिंग के लिए अपने PATH पर्यावरण चर में जोड़ सकते हैं, या आप अपने संकलक झंडे में "-static-libgcc -static-libstdc ++" जोड़कर समस्या से बच सकते हैं।

यदि आप निष्पादन योग्य को वितरित करने की योजना बनाते हैं, तो बाद वाला संभवतः सबसे अधिक समझ में आता है। यदि आप इसे केवल अपनी मशीन पर चलाने की योजना बनाते हैं, तो पाथ पर्यावरण चर बदलना एक आकर्षक विकल्प है (निष्पादन योग्य आकार को नीचे रखता है)।

अपडेट किया गया:

ग्रेग Treleaven (नीचे टिप्पणी देखें) से प्रतिक्रिया के आधार पर, मैं लिंक जोड़ रहा हूं:

[कोड का स्क्रीनशॉट :: ब्लॉक "प्रोजेक्ट बिल्ड विकल्प"]

[GNU जीसीसी लिंक विकल्प]

उत्तरार्द्ध चर्चा में -static-libgccऔर -static-libstdc++लिंकर विकल्प शामिल हैं।


मुझे @xRobot जैसी ही समस्या है, और मुझे कंपाइलर फ़्लैग में सामान जोड़ने के लिए कहीं भी नहीं मिला, इसलिए मैंने इसे अन्य विकल्पों में जोड़ने की कोशिश की, फिर लिंकर ऑप्शंस, और त्रुटि संदेश अभी भी हुआ। क्या मैं जो कर रहा हूं उसमें कुछ भी गलत है?
ग्रेग ट्रेलियन ने

@Grel Treleaven: सिर्फ स्पष्टता के लिए, आप कोड के साथ एक निष्पादन योग्य बना रहे हैं :: ब्लॉक, यह IDE के अंदर अपेक्षित रूप से काम करता है लेकिन एक त्रुटि की रिपोर्ट करता है "क्योंकि libgcc_s_dw2-1.dll गायब है" जब यह चलाने का प्रयास नहीं करता है आईडीई के बाहर। आपने संकलक की बिन निर्देशिका की जाँच की, और हाँ, यह DLL वास्तव में है। आप एक स्थिर लिंकेज करके समस्या को ठीक करने की कोशिश कर रहे हैं, जो कि लाइब्रेरी से संकलित कोड में खींचती है इसलिए DLL (रनटाइम लिंकेज) की आवश्यकता नहीं है, लेकिन यह काम नहीं कर रहा है। दो सुझाव: एक साफ निर्माण करें (बदलते विकल्प एक पुनर्निर्माण को ट्रिगर नहीं कर सकते हैं), और पाथ चर को जोड़ने का प्रयास करें।
हार्डमैथ

@hardmath: अभी भी एक साफ पुनर्निर्माण करने के बाद काम नहीं कर रहा है, इसलिए मुझे लगता है कि मुझे इसे ठीक करने के लिए अन्य तरीकों में से एक का उपयोग करना होगा। मदद के लिए धन्यवाद।
ग्रेग ट्राइलेवेन 13

@Grel Treleaven: संकलक की बिन निर्देशिका को अपने PATH में जोड़ने का प्रयास करने का कारण यह दिखाना है (यदि वह काम करता है) जो कि निष्पादन योग्य अभी भी मानक पुस्तकालयों (DLL) के रनटाइम लिंकेज के लिए बनाया जा रहा है। मैं सोच रहा हूं कि समस्या यह है और हमें खोजने की जरूरत है (यदि आप लाइब्रेरी कोड का स्थैतिक लिंक करना चाहते हैं) जहां कंपाइलर झंडे लगाने हैं।
कठमठ

4
इस चर्चा जारी है (और हल किया जाता है) यहाँ
डेविड सी

37

ग्रहण में, आप इसे प्रोजेक्ट गुण> C / C ++ बिल्ड> सेटिंग्स> MinGW C ++ Linker> Misc के तहत पाएंगे।

आपको इसे शीर्ष पर "लिंकर फ़्लैग" में जोड़ना होगा; कहीं नहीं। फिर बस पुनर्निर्माण।

ग्रहण गुण स्क्रीनशॉट

मैंने पाया है कि उन आंकड़ों को जोड़ने से अनुकूलन के साथ 1,400kb तक का आकार भी फट जाता है। यह केवल साझा DLL पर कॉपी करने की तुलना में 277kb बड़ा है। यह सब कुछ UPXing के बाद 388kb बड़ा है। यहां बहुत हार / हार हुई। बस DLL को शामिल करें क्योंकि अंतिम-उपयोगकर्ता उन्हें हटाने का निर्णय ले सकता है या नहीं अगर उन्होंने उन्हें कहीं और स्थापित किया है।


1
क्या प्रत्येक नए बनाए गए प्रोजेक्ट में लिंकर ध्वज को जोड़ने से बचने का कोई तरीका है?
रोजर एनजी

पाठकों के लिए: कृपया छवि में जोड़े गए विकल्पों पर ध्यान दें। यह काम। यह एक संदर्भ के रूप में मदद करता है: orfe.princeton.edu/help/article-296
PALEN

10

कोड :: ब्लॉक: सेटिंग्स में '-स्टैटिक' जोड़ें-> संकलक-> लिंकर सेटिंग्स-> अन्य लिंकर विकल्प।


1
यह मेरे लिए पूरी तरह से शीर्षक के अनुसार "लापता" dll के बारे में काम करता था, यह बहुत जल्दी और आसान है, मैं पहले इस पर जाने की सलाह दूंगा।
पॉल कोनोली

सबसे अच्छा उपाय !
इय्याव २०

6

अपने पीसी पर उस dll को ढूंढें, और उसे उसी निर्देशिका में कॉपी करें जहां आपका निष्पादन योग्य है।


दृश्य स्टूडियो के साथ ऐसा क्यों नहीं होता है?
xRobot

1
यह भी करता है, लेकिन अन्य dll के साथ। उदाहरण, यदि आपके पास msvcrt90.dll की कमी है, तो आपकी दृश्य संकलित परियोजना शुरू नहीं होगी (iut की आमतौर पर स्थापित प्रणाली चौड़ी है)
ब्रूस

6

देखें भी । इसने मेरी समस्या हल कर दी।

वैसे, क्या यह निश्चित रूप से compilerझंडा है? शायद linkerयहाँ अधिक उपयुक्त शब्द है?


1
सही समाप्ति के लिए +1! हाँ, लिंक विकल्पों के लिए gcc के लिए मेरा "लिंक" (स्थैतिक पुस्तकालयों के लिए) का एक संकेत था।
हार्डमैथ

5

"Libgcc_s_dw2-1.dll" की प्रतिलिपि बनाना ..exe है। (यदि आप Msys का उपयोग कर रहे हैं, तो इसे \ msys \ bin में कॉपी करें) सुनिश्चित करें कि en.exe में make.exe का पथ सेट है। पथ (यदि Make.exe एक फ़ोल्डर "बिन" में है, तो सबसे अधिक संभावना है, और आपके पास msys है, यह \ msys \ bin है) संकलन, रंड, डीबग, आदि।


5

MinGW http sourceforge.net ट्री पर जाएं। Home / MinGW / Base / gcc / Version4 (या जो भी संस्करण उपयोग कर रहे हैं) / gcc-4 (संस्करण) / के तहत आपको gcc-core-4.8.1-4-mingw32-dll.tar.livema जैसी फ़ाइल मिल जाएगी । इसे निकालें और बिन फ़ोल्डर में जाएं जहां आपको अपना libgcc_s_dw2-1.dll और अन्य dll's मिलेंगे। कॉपी और पेस्ट करें जो आपको अपने बिन निर्देशिका में चाहिए।


5

मैं अपने संकलक के लिए "g ++" के बजाय "gcc" का उपयोग करके इसे दूर करने में सक्षम था। मुझे पता है कि यह ज्यादातर लोगों के लिए एक विकल्प नहीं है, लेकिन मैंने सोचा कि मैं इसे एक वैकल्पिक विकल्प के रूप में उल्लेख करूंगा :)


4

क्या आप इसे सिस्टम 32 में नहीं डाल सकते हैं या कुछ ऐसा करते हैं जैसे आप दूसरों के साथ करते हैं, ताकि आपके द्वारा चलाए जाने वाले हर प्रोग्राम को आपकी मशीन पर वह समस्या न हो?

मुझे सिर्फ वह रास्ता चाहिए जहां इसे रखा जाए।

यह थोड़े कष्टप्रद है कि इसे हर बार जब मैंने अभी-अभी एक कार्यक्रम चलाया, तो इसे निर्देशिका में रखा जाना ...

संपादित करें: मुझे समाधान मिला:

Libgcc_s_dw2-1.dll को अपने कंप्यूटर पर किसी स्थान पर निकालें। हम आपको कार्यक्रम की निर्देशिका के लिए इसे अनज़िप करने की सलाह देते हैं जो libgcc_s_dw2-1.dll का अनुरोध कर रही है।

यदि वह काम नहीं करता है, तो आपको अपनी प्रणाली निर्देशिका में libgcc_s_dw2-1.dll निकालना होगा। डिफ़ॉल्ट रूप से, यह है:

  • C: \ Windows \ System (Windows 95/98 / Me)
  • C: \ WINNT \ System32 (Windows NT / 2000)
  • C: \ Windows \ System32 (Windows XP, Vista, 7)

यदि आप विंडोज के 64-बिट संस्करण का उपयोग करते हैं, तो आपको C: \ Windows \ SysWOW64 \ में libgcc_s_dw2-1.dll भी रखना चाहिए

किसी भी मौजूदा फ़ाइलों को अधिलेखित करना सुनिश्चित करें (लेकिन मूल फ़ाइल की एक बैकअप प्रतिलिपि बनाएँ)। कंप्यूटर को दोबारा चालू करो।

यदि समस्या अभी भी होती है, तो निम्न प्रयास करें:

  • विंडोज स्टार्ट मेनू खोलें और "रन ..." चुनें।
  • CMD टाइप करें और Enter दबाएँ (या यदि आप Windows ME का उपयोग करते हैं, तो COMMAND टाइप करें))।
  • Regsvr32 libgcc_s_dw2-1.dll टाइप करें और Enter दबाएँ।

12
कृपया उत्तर के रूप में टिप्पणी पोस्ट न करें। यह स्टैक ओवरफ्लो कैसे काम करता है। आपको "क्योंकि" के बजाय "यू" और "कॉस" के बजाय "यू" का उपयोग करने की आवश्यकता नहीं होगी। चैट बोल यहां विशेष रूप से अस्वीकृत है।
meagar

4

बस सेटिंग्स >> कंपाइलर और डीबगर पर जाएं, फिर लिंकर सेटिंग्स टैब पर क्लिक करें और "अन्य लिंकर विकल्प" एडिट कंट्रोल और पेस्ट पर जाएं: "-static-libgcc -static-libstdc ++" इसके लिए, कोई कंपाइलर फ्लैग विकल्प नहीं है कोड के लिए कंपाइलर फ्लैग विकल्प :: ब्लॉक ताकि उस समस्या को हल करने का तरीका हो, मैं यहां एक समाधान की तलाश में आया था और "-atic-libgcc -static-libstdc ++" के बारे में पोस्ट करने वाले एक व्यक्ति ने सही विचार दिया, और मैं दुर्घटना से बाकी का पता लगाता हूं, लेकिन यह काम करता है, फ़ाइल अब बाहर से क्लिक करने योग्य है कोड :: ब्लॉक, डेस्कटॉप से ​​सही काम करता है।


3

पाथ पर्यावरण चर में उस dll के लिए पथ जोड़ें।


दृश्य स्टूडियो के साथ ऐसा क्यों नहीं होता है?
XRobot

संभवत: क्योंकि उस dll को पथ VisualStudio के टूल-> विकल्प-> प्रोजेक्ट और समाधान -> VC ++ निर्देशिकाएँ -> निष्पादन योग्य फ़ाइलों में सूचीबद्ध किया गया है। विज़ुअल स्टूडियो यहाँ और PATH वातावरण चर में dlls के लिए रास्तों की खोज करते समय दिखता है।
बोजन कोमाजेक

2

सहित स्थैतिक-libgcc , संकलन लाइन पर इस मुद्दे को हल करती है

g++ my.cpp -o my.exe -static-libgcc

के अनुसार: @hardmath

यदि आप उदाहरण के लिए MSYS2 पर हैं, तो आप अपनी प्रोफ़ाइल [.profile] पर एक उपनाम भी बना सकते हैं

alias g++="g++ -static-libgcc"

अब आपका GCC कमांड;

अपने टर्मिनल को पुनः आरंभ करने के लिए रिमाइबर करें


1

अन्य लिंकर विकल्पों में "-स्टिक" जोड़ें इस समस्या को हल करता है। मेरे द्वारा किसी अन्य सिस्टम पर परीक्षण करने के बाद मैं केवल यही समस्या रख रहा था, लेकिन अपने दम पर नहीं, इसलिए भले ही आपने अपने विकास प्रणाली पर इस पर ध्यान नहीं दिया हो, आपको यह जाँचना चाहिए कि आपके पास यह सेट है यदि आप स्टेटिकली लिंकिंग कर रहे हैं।

एक अन्य नोट, निष्पादन योग्य के रूप में DLL को एक ही फ़ोल्डर में कॉपी करना एक समाधान नहीं है क्योंकि यह स्टेटिकली लिंकिंग के विचार को पराजित करता है।

एक अन्य विकल्प मिनगॉव के टीडीएम संस्करण का उपयोग करना है जो इस समस्या को हल करता है।

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


0

Msys2 के साथ काम करते हुए मैंने एक डीबग वातावरण में अपनी परियोजना के रिलीज़ संस्करण को निष्पादित करने की कोशिश में एक ही त्रुटि प्राप्त की है। मेरी समस्या का हल स्पष्ट है: डिबग प्रतीकों के साथ निष्पादन योग्य का उपयोग करें।


0

कोडब्लॉक में आप सेटिंग ... कंपाइलर ... पर जा सकते हैं और 1 चुन सकते हैं) ब्लू बॉक्स में दो आइटम या 2) ग्रीन बॉक्स में एक आइटम

कोडब्लक संकलक सेटिंग्स


0

यदि आप सोच रहे हैं कि आप साझा लाइब्रेरी को कहाँ से डाउनलोड कर सकते हैं (हालाँकि यह आपके क्लाइंट के उपकरणों पर तब तक काम नहीं करेगा जब तक आप डीएलएल को शामिल नहीं करते) यहाँ लिंक है: https://de.osdn.net/projects/mingw/downloads/72215/ libgcc-9.2.0-1-mingw32-dll-1.tar.xz /

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.