2010-12-05 8 views
6

की आवश्यकता न हो, मैं एक (हास्केल) प्रोग्राम कैसे संकलित कर सकता हूं ताकि उसे DLL की आवश्यकता न हो?प्रोग्राम कैसे बनाएं ताकि इसे DLLs

मैंने एक प्रोग्राम लिखा है जो जीएलयूटी का उपयोग करता है और glut32.dll की आवश्यकता है। मैंने इसे ghc --make program.hs के साथ संकलित किया। अब मैं अपने प्रोग्राम को वितरित करना चाहता हूं, लेकिन मैं नहीं चाहता कि इसे किसी भी डीएलएल की आवश्यकता हो (इसलिए मैं केवल उपयोगकर्ताओं को .exe दे सकता हूं)। मैंने ghc -static --make program.hs के साथ संकलन करने की कोशिश की लेकिन यह काम नहीं किया, मुझे अभी भी "उपयोगकर्ता त्रुटि (अज्ञात GLUT प्रविष्टि glutInit)" मिलती है।

मैं यह कैसे कर सकता हूं?

+0

यह भी देखें http://stackoverflow.com/questions/5953199/create-a-static-haskell-linux-executable –

उत्तर

3

यह केवल तभी संभव है जब जीएलयूटी लाइब्रेरी का एक स्थिर संस्करण प्रदान करता है (इसे glut32s.lib जैसे कुछ नाम दिया जा सकता है लेकिन इसमें कोई आवश्यकता नहीं है कि वे इसे विशेष रूप से कुछ भी कहते हैं)।

इस दृष्टिकोण की सफलता इस बात पर भी निर्भर करेगी कि जीएचसी बाहरी स्थैतिक पुस्तकालयों से जुड़ने की अनुमति देता है या नहीं। ghc के लिए मैन पेज इंगित करता है कि -static केवल अन्य बाहरी पुस्तकालयों के लिए हास्केल पुस्तकालयों पर लागू होता है।

2

मान लिया जाये कि आप आवश्यक सी पुस्तकालयों के स्थिर संस्करण है, आप एक स्थिर हास्केल के साथ निष्पादन योग्य बना सकते हैं:

ghc -O2 --make -static -optc-static -optl-static A.hs -fvia-C 

जो दोनों हास्केल घटकों सुनिश्चित करता है, और सी घटकों स्थिर लिंक कर दिया जाएगा, सी toolchain के माध्यम से ।