क्या Cygwin 32bit से Cygwin 64bit पर जाना उचित है?




32bit-64bit windows-7-x64 (5)

मैं Cygwin (लंबे समय से) का उपयोग कर रहा हूं। विशेष रूप से, मैं इसका उपयोग विकास कार्य के लिए Win7 पर (gcc / g ++ सहित) करता हूं। मैंने अभी हाल ही में देखा है कि अब 64-बिट संस्करण मौजूद है।

मेरे पास कोई विशिष्ट आवश्यकता नहीं है जिसके लिए यह आवश्यक है कि मैं 64-बिट में परिवर्तन करूँ, लेकिन मैं सोच रहा था कि क्या करना है। क्या यह उचित है? पक्ष और विपक्ष क्या होते हैं? क्या संक्रमण करते समय अति-समस्याएँ ज्ञात हैं?


एक बार, 64-बिट Cygwin 32-बिट Cygwin में मौजूद कई पैकेजों को याद कर रहा था, लेकिन आज ऐसे पैकेजों की सूची काफी कम है। चूँकि 64-बिट विंडोज सिस्टम पर नए 32-बिट Cygwin इंस्टाल बनाने का अंतिम महत्वपूर्ण कारण था, इसलिए यह संभव नहीं है कि आपके पास आज ऐसा करने का एक अच्छा कारण हो।

64-बिट साइगविन का उपयोग करने का सबसे बड़ा लाभ अधिक से अधिक मात्रा में मेमोरी तक पहुंच है। लाभ प्रस्तुत करने के दो अलग-अलग तरीके हैं:

  1. कई साइगविन कार्यक्रम उतनी रैम का उपयोग करेंगे जितना आप उन्हें दे सकते हैं।

    यदि आप बड़े डेटा सेट के साथ R के Cygwin संस्करण का उपयोग कर रहे हैं, उदाहरण के लिए, आपको 64-बिट Cygwin ASAP पर स्विच करना चाहिए क्योंकि R, RAM में सेट किए गए संपूर्ण डेटा को लोड करना चाहता है, इसलिए 64-बिट पर 32-बिट Cygwin का उपयोग कर रहा है मशीन कृत्रिम रूप से सीमित करता है कि आर क्या सिग्विन के तहत पूरा कर सकता है।

  2. जिस तरह से Cygwin fork() कॉल के चेहरे में DLL के साथ काम करता है, उसके लिए आवश्यक है कि उन्हें एक निश्चित मेमोरी पते पर लोड किया जाए।

    (यह rebase तंत्र है , जो आमतौर पर साइगविन के setup.exe के प्रत्येक रन के अंत में स्वचालित रूप से चलता है।)

    इसका एक परिणाम यह है कि 32-बिट साइगविन में इतने सारे पैकेज स्थापित करना संभव था कि rebase पता स्थान से बाहर भाग गया और उन्हें सभी अद्वितीय लोडिंग पते देने की कोशिश कर रहा था। 64-बिट एड्रेस स्पेस का घातीय रूप से बड़ा आकार इस संभावना को समाप्त कर देता है, सभी व्यावहारिक उद्देश्यों के लिए।

64-बिट Cygwin कुछ मामलों में, थोड़ा तेज भी हो सकता है।

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

यह मौलिक असंगति आपको कई तरीकों से काट सकती है:

  1. हालांकि 64-बिट Cygwin प्रोग्राम 32-बिट Cygwin प्रोग्राम लॉन्च कर सकता है और इसके विपरीत, कई क्रॉस-प्रोसेस मैकेनिज्म उस सीमा पर काम नहीं करेंगे: POSIX साझा मेमोरी, फ़ाइल हैंडल पासिंग, getppid(2) ...

  2. यहां तक ​​कि कुछ चीजें जो आप क्रॉस-प्रोसेस होने के बारे में नहीं सोचते हैं, जब आप दो अलग-अलग साइग्विन को एक साथ बनाने की कोशिश करेंगे तो असफल हो जाएंगे। उदाहरण के लिए, Cygwin /proc की अधिकांश सामग्री DLL के भीतर से आती है, इसलिए यह दो Cygwins के बीच भिन्न होगी, भले ही वे एक ही मशीन पर एक साथ चल रही हों।

  3. कहते हैं कि आप Cygwins के बीच /usr/local को साझा करना चाहते थे ताकि आपके पास स्रोत से निर्मित सभी सॉफ़्टवेयर की दो प्रतियां न हों।

    ऊपर दिए गए पहले आइटम को पढ़ने के बाद, आपको एहसास होता है कि आप /usr/local/bin या /usr/local/lib शेयर नहीं कर सकते।

    इस पर सोचने के बाद, आप तय करते हैं कि आप बस शेयर करना चाहते हैं /usr/local/src ताकि आपको कम से कम डुप्लिकेट स्रोत पेड़ न लगाने पड़ें। यदि आप स्रोत ट्री में इनमें से कोई भी प्रोग्राम बनाते हैं, तो भी आपको समस्याएँ होने वाली हैं। (अर्थात ./configure && make && make install )

    यह दो कारणों से होता है:

    • उत्पन्न बायनेरिज़ ( *.o , *.so , *.a , *.exe ...) दो साइग्विन के बीच असंगत होगा, इसलिए जब तक आप साइग्विन के बीच स्विच करते समय make clean करते, वे पीछे छूट जाते हैं, जिससे उलझन।

    • यहां तक ​​कि अगर आपको make clean याद है, तो प्रत्येक Cygwin के तहत ./configure का उत्पादन संभवत: अलग होगा, इसलिए 64-बिट Cygwin के तहत एक प्रोग्राम बनाने का प्रयास जो 32-बिट Cygwin (या इसके विपरीत) के तहत कॉन्फ़िगर किया गया था, विफल हो सकता है।

    इस जाल से निकलने के कई तरीके हैं:

    • शेयरिंग /usr/local/src भी छोड़ दें।

    • जब भी आप Cygwins स्विच करते हैं, make clean && ./configure //configure make clean && ./configure याद रखें।

    • प्रत्येक Cygwin संस्करण के लिए अलग - अलग बिल्ड -ऑफ-ट्री बनाएँ।

      यह पिछले विकल्प की तुलना में क्लीनर, तेज और अधिक विश्वसनीय है, लेकिन इसे अनुमति देने के लिए सभी स्रोत पेड़ नहीं लगाए गए हैं।

यदि आपके पास ऐसी समस्याओं से निपटने का एक अच्छा कारण नहीं है, तो एक संस्करण या दूसरे को स्थापित करें, दोनों को नहीं।

यदि आपके पास 32-बिट Cygwin सेटअप है और 64-बिट Cygwin के लाभों की आवश्यकता नहीं है, तो आपको यह महसूस करने की आवश्यकता नहीं है कि आपको इसे 64-बिट इंस्टॉल के साथ बदलना होगा। 32-बिट Cygwin किसी भी समय जल्द ही दूर नहीं जा रहा है।

उसी समय, अगर मैं एक नया 64-बिट विंडोज बॉक्स स्थापित कर रहा था, तो मैं उस पर 64-बिट साइगविन स्थापित करूंगा जब तक कि मुझे पता नहीं था कि यह एक पैकेज नहीं है जिसे मुझे ज़रूरत है, और मैं नहीं था पोर्ट खुद करने को तैयार है। यह स्थिर है और ज्यादातर पूर्ण है।


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


Cygwin सह-प्रमुख डेवलपर, Corinna Vinschen ने Cygwin 1.7.25 के जारी नोटों के भाग के रूप में निम्नलिखित बातें कही हैं :

64 बिट नियम के बारे में

यह केवल चौथा आधिकारिक Cygwin रिलीज़ है जो AMD64 विंडोज सिस्टम के लिए 64 बिट संस्करण के रूप में पारंपरिक रूप से उपलब्ध है, इसलिए यह अभी भी बहुत नया है।

अभी 64 बिट Cygwin वितरण 32 बिट संस्करण के रूप में कई पैकेजों के साथ नहीं आता है, लेकिन यह 32 बिट संस्करण के रूप में स्थिर है, और अधिक पैकेज समय के साथ उपलब्ध होंगे।

यदि आप पहले से 64 बिट विंडोज मशीनों पर Cygwin का 32 बिट संस्करण चला रहे हैं, तो आप ऐसा करना जारी रख सकते हैं। यदि आप 64 बिट Windows मशीन पर Cygwin की एक नई स्थापना की योजना बना रहे हैं, तो नए 64 बिट Cygwin संस्करण का उपयोग करने पर विचार करें, जब तक कि आपको 64 बिट रिलीज़ में उपलब्ध निश्चित पैकेज की आवश्यकता न हो।


दोनों को स्थापित करें। इसमें ज्यादा समय या डिस्क स्थान नहीं लगता है, और कुछ पैकेज cygwin64 के लिए उपलब्ध नहीं हैं। (उन्हें अलग-अलग निर्देशिकाओं में रखें!)

मुझे नहीं पता कि क्या cygwin64 में sqlite3 उन डेटाबेसों को अनुक्रमित कर सकता है जो आकार में लगभग 4 जी हैं, लेकिन मुझे पता है कि cygwin32 में sqlite3 नहीं कर सकते हैं, और 64-बिट लिनक्स में sqlite3 कर सकते हैं।

cygwin64 में अभी भी pdftk (PDF टूलकिट) नहीं है।


Cygwin x64 के साथ कुछ बड़े फायदे हैं। उनमें से एक बेहतर स्मृति प्रबंधन है। मैंने address already in use , या fork: retry: Resource temporarily unavailable rebaseall बहुत सारे address already in use fork: retry: Resource temporarily unavailable जिसने मुझे दिन में कई बार rebaseall चलाने के लिए मजबूर किया।

Cygwin x64 के साथ मेरे पास इस तरह का कोई मुद्दा नहीं था।