यदि आपने .a
लाइब्रेरी से लिंक किया है, तो आप पहले ही स्थिर रूप से लिंक कर चुके हैं। आपको .a
पुस्तकालयों को कभी भी शिप करने की आवश्यकता नहीं है। वे सिर्फ वस्तुओं के बंडल हैं।
संपादित करें: आपका त्रुटि दृढ़ता से पता चलता है कि आप ए से dylib लिंक कर रहे हैं बल्कि। यदि आपके पास लाइब्रेरी पथ में libfoo.dylib
और libfoo.a
है, भले ही आप "लिंक libfoo.a
" एक्सकोड में कहते हैं, और यहां तक कि libfoo.a
पहले भी खोज पथ में है, तो यह अभी भी libfoo.dylib
लिंक करेगा। ऐसा इसलिए है क्योंकि एक्सकोड का लिंक पूरी तरह से टूटा हुआ है और लिंकर को -lfoo
पास करता है (आपको कभी भी बनाया गया कोई सटीक पथ नहीं है और आपको सटीक पथ रखने के लिए -l
का उपयोग नहीं करना चाहिए)। मैं हमेशा निर्माण फलक का उपयोग करने के बजाय xcconfig फ़ाइल में LDFLAGS
में बनाए गए पुस्तकालयों को जोड़ने की अनुशंसा करता हूं। आप -l
का उपयोग करने के बजाय इच्छित पथ को पारित करते हैं। Xcconfig पर मेरे विचारों के लिए Abandoning the Build Panel देखें। यह अब पुराना है, क्योंकि यह एक्सकोड 3 के लिए लिखा गया था, लेकिन मूल बातें अभी भी लागू होती हैं।
बिल्ड फलक का उपयोग करके, आप "अन्य लिंकर ध्वज" में लाइब्रेरी में पूरा पथ भी पारित कर सकते हैं। लेकिन इसमें अभी भी बिल्ड फलक की सभी समस्याएं हैं।
तेज (लेकिन कम मजबूत) समाधान कभी-कभी "अन्य लिंकर ध्वज" में -Wl,-search_paths_first
जोड़ने के लिए होता है। यह व्यवहार को बदलता है ताकि प्रत्येक पुस्तकालय पथ .dylib
और .a
दोनों पर जाने से पहले खोजा जा सके (डिफ़ॉल्ट व्यवहार .dylib
के लिए हर जगह खोजना है और केवल तभी .a
खोजें)। तो यदि आपका .a
आपके .dylib
से एक अलग निर्देशिका में है, और वह निर्देशिका पहले खोज पथ में है, तो यह काम करेगी।
इस प्रश्न ने मुझे अंत में radar खोलने के लिए मिला, जिसे मैंने कई साल पहले किया था। मैं अनुशंसा करता हूं कि अन्य duplicates खोलें।
स्रोत
2012-03-06 15:47:57
मैंने सोचा कि हालांकि एक अलग कंप्यूटर पर ऐप चलाने की कोशिश करते समय ऐप नहीं चलेगा और एक त्रुटि के साथ आता है जिसमें यह प्रासंगिक .dylib फ़ाइल का पता नहीं लगा सकता है। क्या .a फाइलें 'पुस्तकालयों के साथ लिंक बाइनरी' अनुभाग के अलावा कहीं और परियोजना से जुड़ी होनी चाहिए? –
"बिल्ड फलक का उपयोग करके, आप" अन्य लिंकर ध्वज "में लाइब्रेरी में पूरा पथ भी पारित कर सकते हैं - इससे समस्या हल हो गई। धन्यवाद! –