c++ Staticically विंडोज़ पर लिब्राकाइच को जोड़ने के लिए MinGW के साथ



dll shared-libraries (1)

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

वर्तमान में, मेरी मेक फाइल में, मेरे पास इस तरह कुछ है: -लैथ / / / / लिब्राकाइव / -लैर्चिव में

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

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

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

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

अद्यतन करें

भौतिक रूप से लिब्राकाइव से लिंक करने के लिए, आपके लाइब्रेरी कमांड के लिए इसमें शामिल होना चाहिए:

-लिपाथ / के लिए // ओब्राकाइव / -लैर्चिव_स्टेटिक

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

अब समस्या यह है कि लिब्राक्विज़ bzip2 पुस्तकालयों (और साथ ही अन्य) पर निर्भर करता है, और यदि आपके पास उनके स्थैतिक निर्माण नहीं हैं, तो आपको लिंकर त्रुटियाँ कुछ मिलेंगी:

`BZ2_bzCompressInit 'के लिए अपरिभाषित संदर्भ

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

-लिपाथ / टू / बीज़िप 2 / -लिज़िप 2

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


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

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

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

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

.ए फाइल में वास्तव में .dll फ़ाइल को डायनेमिक लिंक के लिए कुछ कोड शामिल है, न कि खुद को लिब्राकाइव। स्टार्टअप पर फोकस के पॉइंटर्स को आवंटित किया जाता है और डायनेमिक लिंकिंग किया जाता है।





static-libraries