c++ MinGW.exe को कोड के बावजूद कुछ gcc dll की आवश्यकता है?




(2)

आपके आदेश गलत हैं!

उस निर्देशिका पर जाएं जहां आपकी main.cpp फ़ाइल है, और निम्न का प्रयास करें।

g++.exe -Wall -c -g main.cpp -o obj\Debug\main.o
g++.exe -static -static-libgcc -static-libstdc++ -o "bin\Debug\Hello World.exe" obj\Debug\main.o

तो आपको अब DLLs (अपने हैलो वर्ल्ड प्रोग्राम के लिए) कॉपी करने की आवश्यकता नहीं होगी।

अन्य नोट:

MinGW स्थापना निर्देश सेटिंग की सिफारिश करता है

c:\minGW;c:\MinGW\bin;

पाथ पर्यावरण चर के लिए।

आम तौर पर

-static -static-libgcc -static-libstdc++

लिंकर विकल्पों को काम करना चाहिए (उनमें से सभी 3 को एक बार में आजमाएं)। लेकिन libwinpthread-1.dll लिए नहीं।

इसके अलावा, recompiling से पहले clean करने की कोशिश करें।

कोई "-स्टैटिक-कुछ" कमांड नहीं है।

केवल मानक पुस्तकालय libgcc और libstdc ++ को स्थिर लिंकिंग पर सेट किया जा सकता है।

अन्य पुस्तकालयों के लिए, आप पहले "-स्टैटिक" के साथ स्थिर लिंकिंग पर स्विच करते हैं और फिर पुस्तकालयों को अलग-अलग कमांड, यानी "-lpthread" के साथ शामिल करने के लिए सूचीबद्ध करते हैं।

MinGW के साथ संकलन करते समय, मुझे exe चलाए जाने से पहले MinGW bin निर्देशिका से कुछ डीएलएल फ़ाइलों को प्रतिलिपि बनाना होगा (यहां तक ​​कि "-स्टैटिक" और / या "-स्टैटिक-libstdc ++" का उपयोग करते समय भी।) मैं इसे कैसे बदलूं? क्या एमआईजीडब्लू का एक विशेष निर्माण है जिसका मुझे उपयोग करना है? आखिरकार मैं प्रोग्राम में एक्सई के अलावा प्रोग्राम को चलाने में सक्षम होना चाहता हूं (और कोई विंडोज़ पर्यावरण चर सेट नहीं है।) ये फाइलें हैं:

  • libstdc ++ - 6.dll
  • libgcc_s_seh-1.dll
  • libwinpthread-1.dll

और यहां चरण I की पूरी सूची है:

  1. ओपन अप कोड :: ब्लॉक
  2. "फ़ाइल-> नया-> प्रोजेक्ट-> कंसोल" चुनें
  3. प्रोजेक्ट "हैलो वर्ल्ड" के लिए प्रोजेक्ट सेटिंग्स भरें
  4. राइट क्लिक करें प्रोजेक्ट-> बिल्ड विकल्प ...-> हैलो वर्ल्ड (रूट लक्ष्य) -> अन्य विकल्प
  5. पहले से सेट "-फिक्सेप्शन" के तहत "-स्टैटिक" (या "-स्टैटिक-libstdc ++") दर्ज करें
  6. CTRL-F9: बिल्ड बिल्ड (निष्पादन के बिना)
  7. विंडोज एक्सप्लोरर में नेविगेट करें, और निर्मित "हैलो वर्ल्ड.एक्सई" फ़ाइल चलाएं।
  8. जब कोई संदेश पॉप अप कहता है तो "ठीक" पर क्लिक करें "त्रुटि: libstdc ++ - 6.dll आपके कंप्यूटर से गायब है।"
  9. "हैलो वर्ल्ड.एक्सई" निर्देशिका में / minGW / bin / निर्देशिका से "libstdc ++ - 6.dll" कॉपी करें।
  10. "हैलो वर्ल्ड.एक्सई" चलाएं
  11. संदेश के लिए "ठीक" पर क्लिक करें "त्रुटि: libgcc_s_seh-1.dll आपके कंप्यूटर से गायब है।"
  12. "हैलो वर्ल्ड.एक्सई" निर्देशिका में "libgcc_s_seh-1.dll" कॉपी करें।
  13. दोबारा "libwinpthread-1.dll" की प्रतिलिपि बनाकर दोहराएं।
  14. संदेश देखें

    Hello World!
    

संपादित करें: मेरी कमांड लाइन है:

g++.exe -Wall -fexceptions -static -static-libgcc -static-libstdc++ -g -static-libgcc -static-libstdc++ -L. -c "C:\Users\______\Desktop\Hello World\main.cpp" -o obj\Debug\main.o
g++.exe -o "bin\Debug\Hello World.exe" obj\Debug\main.o

ऊपर वर्णित सभी डीएल फाइलों के साथ आवश्यक है। और, बस सुरक्षित होने के लिए, कोड है:

// main.cpp
#include <iostream>

using namespace std;

int main()
{
    cout << "Hello world!" << endl;
    return 0;
}

अपवादों का उपयोग होने पर -static-libgcc एक बुरा विचार हो सकता है। लिंक विकल्प दस्तावेज बताता है कि

ऐसी कई स्थितियां हैं जिनमें किसी एप्लिकेशन को स्थिर संस्करण के बजाय साझा libgcc का उपयोग करना चाहिए। इनमें से सबसे आम बात यह है कि जब एप्लिकेशन विभिन्न साझा पुस्तकालयों में अपवादों को फेंकने और पकड़ने की इच्छा रखता है। उस स्थिति में, प्रत्येक पुस्तकालय के साथ-साथ एप्लिकेशन को साझा libgcc का उपयोग करना चाहिए।





mingw