क्यों cabal install
फ्लैग - सक्षम-डिफ़ॉल्ट रूप से साझा नहीं किया जाता है? मैंने देखा है कि इस ध्वज के बिना संकलित होने पर छोटे कार्यक्रम, फ़ाइल आकार में विशाल हो जाते हैं। क्या कोई कनेक्शन है? क्या यह एक डिज़ाइन विकल्प है कि कैसे हास्केल प्रोग्रामों को एक स्व-निहित बाइनरी में आसानी से तैनात किया जा सकता है?तैनाती में हास्केल स्टेटिक बनाम डायनामिक लिंकिंग
उत्तर
मुझे लगता है कि इसे समर्थन की कमी के साथ करना है। हालांकि, मुझे सीधा जवाब नहीं मिल रहा है कि जीएचसी वर्तमान में गतिशील लिंकिंग का समर्थन करता है या नहीं। जीएचसी विकी पेज SharedLibraries/PlatformSupport दो साल पुराना है।
विंडोज़ पर, मैंने --enable-shared
के साथ पैकेजों का एक पूरा समूह बनाने की कोशिश की, जिसमें मैंने लिखा एक सरल प्रोग्राम जिसमें http-enumerator का उपयोग हर 30 सेकंड में यूआरएल से डाउनलोड करने के लिए किया जाता है। जब मैंने प्रोग्राम चलाया (सभी डीएलएल को मेरे प्रोग्राम के साथ एक फ़ोल्डर में डालने के बाद), यह कुछ सेकंड के बाद segfaulted। जब मैंने --threaded
के साथ संकलित किया, तो यह तुरंत segfaulted।
मैंने इसे जीएचसी 7.0.3 में करने की कोशिश की। एक documentation page for that version कहता है:
डीएलएल में हास्केल पुस्तकालय बनाना इस समय विंडोज पर काम नहीं करता है; हम भविष्य में इस सुविधा को फिर से स्थापित करने की उम्मीद करते हैं (धारा 4.12, "साझा पुस्तकालयों का उपयोग करना" देखें)। ...
यह नोटिस बाद के संस्करणों में प्रकट नहीं होता है।
वैसे कोड कोड के अलावा स्थिर बाइनरी के लिए एक और परेशानी है। जीएचसी अपने बड़े पूर्णांक समर्थन के लिए GMP का उपयोग करता है। जीएमपी को एलजीपीएल के तहत लाइसेंस प्राप्त है। इसका अर्थ यह है कि यदि आपको मालिकाना बाइनरी वितरित करने की आवश्यकता है, या यदि आपके पास निर्भरता है जो जीपीएल-संगत (उदा। ओपनएसएसएल) नहीं है, तो आपको जीएमपी के लाइसेंस का अनुपालन करने के लिए अपनी ऑब्जेक्ट फाइलों को वितरित करने की आवश्यकता होगी। या तो, या libgmp को गतिशील रूप से लिंक करने के लिए एक तरीका खोजें। मैं जानना चाहता हूं कि यह कैसे करें।
यह उत्तर देता है अभी भी मार्च 2015 तक पकड़ो? –
आईएसटी साझा लाइब्रेरी समर्थन काफी नया है और सभी प्लेटफॉर्म पर काम नहीं करता है, यह निष्पादन योग्य वितरित करना भी कठिन बनाता है। और अंतरिक्ष सस्ता है, तो कौन परवाह करता है? यद्यपि एक बेहतर जवाब होगा। – luqui
@luqui: अंतरिक्ष सस्ता हो सकता है, लेकिन बैंडविड्थ के बारे में क्या? क्या होगा यदि आपको इंटरनेट पर अपने 20 एमबी प्रोग्राम के लिए अपडेट को कम से कम आदर्श कनेक्टिविटी वाले ग्राहकों को धक्का देना है? –
[साझा पुस्तकालयों का उपयोग करके "[जीएचसी डॉक्स"] पर भी देखें [http://downloads.haskell.org/~ghc/7.8.4/docs/html/users_guide/using-shared-libs.html) – mb21