2012-07-26 7 views
7

के साथ विंडोज पर लिबरैचिव से जुड़े हुए हैं, मैं कुछ समय से अपने प्रोजेक्ट में लिबरैचिव का उपयोग कर रहा हूं और यह बहुत अच्छा काम कर रहा है, फिलहाल मैं इसे गतिशील रूप से लिंक कर रहा हूं, इसलिए विंडोज़ पर libarchive.dll फ़ाइल मौजूद है सिस्टम पर अब मैं लाइब्रेरी से स्थिर रूप से लिंक करना चाहता हूं इसलिए मुझे डीएलएल वितरित करने की परेशानी नहीं है, लेकिन मुझे इसे प्राप्त करने की कोशिश में वास्तविक समस्या है!मिनीजीडब्लू

वर्तमान में, मेरी मेकअप फ़ाइल में, मैं कुछ इस तरह है: -Lpath/करने के लिए // libarchive/-larchive

और यह काम करता है, लेकिन यह एक गतिशील लिंक करता है। मुझे नहीं पता कि एक स्थिर लिंक को कैसे लागू किया जाए।

मैं libarchive निर्देशिका में देख सकता हूं दो फ़ाइलें, libarchive.dll.a और libarchive_static.a हैं। मुझे लगता है कि मैं libarchive_static.a से लिंक करना चाहता हूं लेकिन मैं इसे निर्दिष्ट करने के लिए प्रतीत नहीं कर सकता, लिंक बनाने त्रुटियों में बनाने फ़ाइल परिणामों में -larchive_static।

मैं इस धारणा के तहत था कि खिड़कियों के नीचे स्थिर पुस्तकालय lib फ़ाइलें हैं, लेकिन जब मैं libarchive बनाता हूं तो मुझे ऐसी कोई फ़ाइल प्रकार नहीं मिलती है।

मैं libarchive से .lib फ़ाइल कैसे बना सकता हूं। इसके अलावा, एक अतिरिक्त प्रश्न के रूप में, फ़ाइल और lib फ़ाइल के बीच क्या अंतर है?

अद्यतन

स्थिर libarchive से लिंक, मेकअप के लिए अपने पुस्तकालय आदेश को शामिल करना चाहिए करने के लिए:

-Lpath/करने के लिए // libarchive/-larchive_static

यह libarchive_static से लिंक करेगा। एक पंक्ति। हालांकि, आपको अपने कोड में LIBARCHIVE_STATIC को परिभाषित करने की भी आवश्यकता है।

अब समस्या यह है कि libarchive (दूसरों के रूप में रूप में अच्छी तरह) bzip2 लाइब्रेरी पर निर्भर करती है, और आप की तरह लिंकर त्रुटियों कुछ मिल जाएगा, तो आप उनमें से एक स्थिर निर्माण की जरूरत नहीं है: `BZ2_bzCompressInit को

अपरिभाषित संदर्भ

-Lpath// bzip2/-lbzip2

को: '

आप libarchive आदेश के बाद निर्भर पुस्तकालयों और लिंकर लिए एक समान आदेश की एक स्थिर निर्माण की जरूरत है

आप स्रोत से bzip2 निर्माण कर सकते हैं या तो, या यह आसान तरीका है और Gnu32Win परियोजना यहां से पहले से बने द्विआधारी मिलती है: http://gnuwin32.sourceforge.net/packages.html

+1

LIBARCHIVE_STATIC को परिभाषित करने के लिए नोट के लिए धन्यवाद। –

उत्तर

3

बस libarchive_static.a अपने लिंक आदेश को स्पष्ट रूप से जोड़ें।

gcc -o YourApp.exe $(OBJS) path/to/libarchive_static.a $(OtherLibs) 

"उदारीकरण" फ़ाइलें संकलक करने के लिए (Borland, माइक्रोसॉफ्ट आदि), "ए" यूनिक्स के ar उपकरण से एक पुराने "संग्रह" प्रारूप है संकलक से भिन्न होते हैं। अब यह केवल स्थिर पुस्तकालयों के बंडल के लिए उपयोग किया जाता है।

वर्तमान में, मेरी मेक फ़ाइल में, मेरे पास कुछ है ... और यह काम करता है, लेकिन यह .a फ़ाइल वास्तव में .dll फाइल करने के लिए गतिशील जोड़ने के लिए कुछ कोड, नहीं libarchive ही होता है एक गतिशील लिंक

करता है। स्टार्टअप पर फ़ंक्शंस को पॉइंटर्स आवंटित किए जाते हैं और गतिशील लिंकिंग की जाती है।

+0

बस कोशिश की, मुझे लिंकर त्रुटियां मिल रही हैं कि लाइब्रेरी में उपयोग किए जा रहे कार्यों में एक गैर-परिभाषित संदर्भ हैं। इसका क्या अर्थ होगा? – oggmonster

+3

इसका तात्पर्य है कि लिबरैचिव कुछ और पर निर्भर करता है। मुझे यकीन है कि ये zlib, libzip2 आदि हैं। क्या आपके पास इनके स्थिर संस्करण हैं? .a फ़ाइलों को प्राप्त करें और उन्हें अपने build कमांड –

+0

पर _after_ libarchive_static.a जोड़ें। हाँ, आप सही हैं, मैंने अपना प्रश्न अपडेट किया है। मैं बाद में कोशिश करूंगा, धन्यवाद! – oggmonster

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