2009-12-30 12 views
16

मान लें कि मेरे पास एक ऐसा एप्लिकेशन है जिसे मैंने साइगविन के तहत संकलित किया है, और मैं उपयोगकर्ता को साइगविन स्थापित करने के बिना उस एप्लिकेशन को वितरित करना चाहता हूं। निष्पादन योग्य और सिग्विन डीएलएल पैकेज करने के लिए पर्याप्त होगा?साइगविन में संकलित एक अनुप्रयोग चलाकर, साइगविन स्थापित किए बिना

+3

साइगविन डीएलएल जीपीएलएड है, इसलिए आपको अपने ऐप के स्रोत को भी वितरित करना होगा। –

+0

लेकिन आप सिगविन के लिए एक वाणिज्यिक लाइसेंस खरीद सकते हैं। –

+0

कृपया विस्तृत करें - क्योंकि उत्तर में दो प्रकार की व्याख्या प्रतीत होती है। क्या आपका मतलब यह तकनीकी रूप से है (जो * अन्य * फ़ाइलों को मुझे वितरित करने की आवश्यकता है), या कानूनी रूप से (लाइसेंस मुझे क्या करने की अनुमति देता है)? – Wim

उत्तर

2

आम तौर पर, हाँ। यद्यपि सिग्विन डीएलएल को सार्वजनिक स्थान पर स्थापित करना सुनिश्चित करें (विंडोज़ \ System32), यह डीएलएल बहुत बुरी तरह व्यवहार करता है जब इसके कई संस्करण एक ही मशीन पर लोड होते हैं।

+1

[जीपीएल लिंकिंग और व्युत्पन्न वर्क्स] (http://en.wikipedia.org/wiki/GNU_General_Public_License#Linking_and_derived_works) –

+1

सवाल लेखक कोड जारी नहीं के बारे में कुछ राज्य नहीं था। कई उपयोगिताओं एक cygwin1.dll बंडल करते हैं। ऐसा एक उदाहरण सीएनटीएमएल है: http://cntlm.sourceforge.net/। – brianegge

0

आप सब कुछ स्थिर के रूप में संकलित करने का प्रयास कर सकते हैं। इससे आपको libs की आवश्यकता के बिना सबकुछ चलाने की अनुमति मिलनी चाहिए (क्योंकि वे पहले से ही आपकी बाइनरी में हैं)। लेकिन इसका यह भी अर्थ होगा कि यदि साइगविन को एक अलग या नए डीएल की आवश्यकता होगी तो यह सभी प्लेटफ़ॉर्म काम नहीं कर सकता है।

+0

यह काम नहीं करेगा: http://stackoverflow.com/questions/340696/can-you-statically-compile-a-cygwin- appplication – Hut8

3

क्या आपके एप्लिकेशन को वास्तव में पॉज़िक्स इम्यूलेशन प्रदान किए गए किसी भी सिगविन की आवश्यकता है? यदि नहीं, तो आप इसे -मोनो-साइगविन ध्वज के साथ संकलित कर सकते हैं और यह साइगविन पर निर्भर नहीं होगा, लेकिन मूल विंडोज एप्लिकेशन होगा। अक्सर, आपको केवल अपने एप्लिकेशन को कॉन्फ़िगर करने और बनाने के लिए एक असली खोल (बैश) की आवश्यकता होती है, लेकिन आपको वास्तव में सिगविन की पॉज़िक्स कार्यक्षमता की आवश्यकता नहीं होती है।

एक और विकल्प MSYS + MinGW है, जो सिग्विन का एक हल्का वजन का कांटा है। यह एक संकलन वातावरण प्रदान करता है जो डिफ़ॉल्ट रूप से देशी विंडोज ऐप्स उत्पन्न करता है।

एक तीसरा विकल्प सिगविन से ही मिनजीडब्ल्यू कंपाइलर्स का उपयोग करना होगा। वे सामान्य सिग्विन पैकेज मैनेजर के माध्यम से उपलब्ध होना चाहिए। फिर आप MinGW कंपाइलर्स का उपयोग कर क्रॉस-कंपाइल के लिए प्रोजेक्ट को कॉन्फ़िगर करेंगे।

+0

एमएसवाईएस साइगविन का कांटा नहीं है। –

+1

http://www.mingw.org/history http://en.wikipedia.org/wiki/MinGW#Comparison_with_Cygwin इसके अतिरिक्त, मिनजीडब्ल्यू मेलिंग सूची में मुख्य लोग अक्सर कहते हैं कि मिनजीडब्ल्यू/एमएसवाईएस एक कांटा है सिगविन का। –

+0

मिनजीडब्ल्यू एमएसवाईएस –

2

चीजें बदल गई हैं। सिगविन पुस्तकालय अब कम जीपीएल (v3) के तहत हैं, जिससे उन्हें उन अनुप्रयोगों के साथ बंडल करना संभव हो जाता है जो एफओएसएस से स्वामित्व तक लाइसेंस की विस्तृत श्रृंखला के अंतर्गत आते हैं।

इस बात का क्या अर्थ है कि सिग्विन में POSIX अनुकरण मूल विंडोज अनुप्रयोगों के परिप्रेक्ष्य से चीजों को बहुत दूर ले जाता है।

यह जहाँ मेरे Cygnal परियोजना में आता है Cygnal Cygwin मूल निवासी आवेदन लाइब्रेरी के लिए खड़ा है:। यह है एक ड्रॉप में जो परिवर्तन, या कुछ मामलों में बस फिर से कॉन्फ़िगर, कुछ कार्यक्षमता के व्यवहार क्रम में Cygwin की संगत कांटा विंडोज प्लेटफार्म के देशी सम्मेलनों के अनुरूप है।

एक मूल "हैलो, वर्ल्ड" सिगविन कार्यक्रम के लिए दो पुस्तकालयों की आवश्यकता होती है। एक जीसीसी रन-टाइम cyggcc_s-1.dll और सिग्विन डीएलएल cygwin1.dll कहा जाता है। Cygnal परियोजना उत्तरार्द्ध के लिए एक प्रतिस्थापन प्रदान करता है। (डाउनलोड के लिए एक 32 बिट बिल्ड उपलब्ध है)।

दुनिया और विंडोज के सिग्विन पॉज़िक्स दृश्य के बीच असंगतता का एक चमकदार क्षेत्र पथ प्रबंधन है। फाइल सिस्टम का सिग्विन दृश्य नकली / रूट निर्देशिका, और इसकी अपनी आंतरिक "माउंट टेबल" के माध्यम से है जो /cygdrive, /proc और /dev जैसे रिक्त स्थान प्रदान करता है। सिगनल उस सब से दूर है। पथ Win32 पथ हैं। वर्तमान कार्यशील निर्देशिका विंडोज वर्तमान कार्यशील निर्देशिका की तरह व्यवहार करती है। ड्राइव वर्तमान निर्देशिकाओं से जुड़े हुए हैं, और साइगनल के तहत D:foo.txt काम जैसे सापेक्ष पथ ड्राइव करते हैं। सिग्नल के तहत, /dev और /proc अभी भी उपलब्ध हैं: उन्हें विशेष उपसर्ग dev:/ और proc:/ के रूप में उपयोग किया जाता है। इसमें chdir की अनुमति नहीं है: यह मूल नहीं होगा! सिगनल के तहत, यदि आप chdir से D:\wherever तो आपका वर्तमान ड्राइव D ड्राइव है, और /foo या \foo पथ D:\foo देखें।सिगविन का मास्टर पॉज़िक्स रूट निर्देशिका चला गया है।

फिर भी, सिगनल के साथ, आप पीओएसआईक्स कार्यक्षमता का उपयोग करना जारी रख सकते हैं, जिससे प्लेटफॉर्म पर आधारित स्विच कम हो सकता है, जो कि मिनीजीडब्लू या माइक्रोसॉफ्ट विजुअल सी/सी ++।

उदाहरण के लिए: आप VT100 कोड और termios का उपयोग कर एक Win32 कंसोल एप्लिकेशन लिख सकते हैं। यूनिक्स पर एक ही कोड चलाएगा। POSIX सिस्टम पर Windows और VT100/termios पर Win32 कंसोल API का उपयोग करने की आवश्यकता नहीं है।

एक और उदाहरण: थ्रेडिंग के लिए, आप बस POSIX धागे का उपयोग कर सकते हैं। pthread_create एक थ्रेड शुरू करने के लिए, pthread_mutex_lock एक mutex को लॉक करने के लिए और इसी तरह। आपके प्रोग्राम को थ्रेड के लिए पोर्टेबिलिटी अबास्ट्रक्शन की आवश्यकता नहीं है जो Win32 या POSIX में अनुवाद करता है; आप बस POSIX का उपयोग करें और यही वह है।

Cygnal में uname समारोह के बजाय एक CYGNAL उपसर्ग CYGWIN साथ sysname रिपोर्ट। इसके माध्यम से, आपका प्रोग्राम बता सकता है कि यह सिगविन (या किसी अन्य POSIX प्लेटफ़ॉर्म) की बजाय सिगनल पर चल रहा है। इस प्रकार आप कोई आवश्यक समायोजन कर सकते हैं: उदाहरण के लिए, यदि आपके प्रोग्राम को /dev/null की आवश्यकता है, तो सिग्नल पर यह dev:/null इसके बजाय देख सकता है।

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