2012-11-30 12 views
5

मैं कई जीएनयू उपयोगिता बनाने के लिए mingw gcc और msys का उपयोग कर रहा हूं। अतीत में, मुझे libiconv के विभिन्न संस्करणों की आवश्यकता वाले विभिन्न निष्पादकों के कारण बहुत सी समस्याएं आई हैं, इसलिए समस्या से बचने के लिए मैं आइकनव को स्थिर रूप से एक्जिक्यूटिव में लिंक करना चाहता था।मैं msys का उपयोग कर विंडोज़ पर iconv को स्थिर रूप से कैसे लिंक करूं?

मैंने कॉन्फ़िगरेशन-सक्षम-स्थिर के साथ mingw और msys का उपयोग करके libiconv बनाया है। यह DLL, .dll.a आयात लाइब्रेरी और सादा .a स्थिर लाइब्रेरी दोनों बनाता है।

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

मैं कैसे सुनिश्चित कर सकता हूं कि मेरे द्वारा बनाए गए प्रोग्राम स्थिर रूप से जुड़े हुए हैं? बिल्ड करने के दौरान .dll.a फ़ाइल को निकालने के लिए बस एक स्पष्ट दृष्टिकोण है। यह शायद सबसे आसान विकल्प है, लेकिन मैं उत्सुक हूं - क्या एक लिंकर ध्वज है जिसे मैं सेट कर सकता हूं (एलडीएफएलजीएस की तरह कुछ के माध्यम से) आइकन को स्थिर रूप से लोड किया जा सकता है (आदर्श रूप से, अन्य पुस्तकालयों को प्रभावित किए बिना, लेकिन चुटकी पर मैं ठीक हूँ सभी पुस्तकालयों को स्थिर रूप से लोड करने के साथ)

उत्तर

1

आप सही हैं, डिफ़ॉल्ट रूप से यह "साझा" लिंक करने जा रहा है जब तक कि आप इसे विशेष रूप से स्थिर लिंक न करें। आप इस के लिए कुछ तरीके हैं, जो भी काम करता है आप

make CC='gcc -static' 
make LDFLAGS=-static 
make LDFLAGS=libiconv.a 

तुम बस Makefile को देखो और इसे फिट करने के लिए कम से कम दखल रास्ता खोजने की जरूरत है के लिए कर सकते हैं।

Example

+0

मुमकिन है पहले दो * सबकुछ * स्थिर रूप से लिंक करेगा, जबकि तीसरा केवल आइकनव स्थिर रूप से लिंक करेगा (और zlib जैसे अन्य पुस्तकालय अभी भी डीएलएल से लिंक होंगे)। –

+0

या '-Wl, -Bstatic, -liconv' –

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

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