2012-01-18 13 views
5

मेरा प्रश्न के this questionजी ++ लिंकर को नहीं पहचानता है -Bstatic

2 पुस्तकालयों के खिलाफ लिंक करना चाहते हैं एक विस्तार है - foo और bar बार के लिए foo के लिए स्थिर और गतिशील पसंद करते हैं। अगर मैं

g++ -static -lfoo -lbar 

यह फ़ू और बार दोनों के लिए स्थिर संग्रह खोजने का प्रयास करता है। जब मैं

g++ -Wl,-Bstatic -lfoo -Wl,-Bdynamic -lbar -Wl,--as-needed 
प्रति अतः उपरोक्त प्रश्न के रूप में

को आदेश बदलने के लिए, इस त्रुटि मैं मिलता है:

ld: unknown option: -Bstatic 

अद्यतन: मैं उपयोग कर रहा हूँ OSX, कि यदि कोई फर्क नहीं पड़ता

+0

'-Wl, -static' के साथ-साथ – nos

+1

आज़माएं, मुझे यह' ld: चेतावनी: अनपेक्षित dylib (/path/to/libfoo.dylib) लिंक लाइन पर मिल रहा है। यह वही स्थान भी है। मैंने मैन्युअल रूप से dylib हटा दिया है, और अब 'ld' को लेने के लिए मजबूर किया गया है। ए। लेकिन यह समाधान नहीं होना चाहिए क्योंकि '-ब्लूएल, -स्टैटिक' को असंबद्धता माना जाता है, मुझे नहीं –

उत्तर

5

क्या हम यहां जीएनयू लिंकर से काम कर रहे हैं? क्या आप हमें "एलडी-वी" का आउटपुट दिखा सकते हैं?

संपादित करें: जो जीएनयू के एलडी की तरह नहीं दिखता है, इसलिए यही कारण है कि -स्टैटिक विकल्प पहचाना नहीं गया है। और ऐसा लगता है कि ऐप्पल का एलडी मिश्रण स्थिर और गतिशील पुस्तकालयों का बहुत अच्छा समर्थन नहीं करता है; इसे देखें: Mixed static and dynamic link on Mac OS

+0

$ ld -v @ (#) प्रोग्राम: एलडी परियोजना: एलडी 64-127.2 एलएलएम संस्करण 3.0 एसवीएन, ऐप्पल से क्लैंग 3.0 (211.10.1 का निर्माण) –

+0

+1 स्पष्टीकरण के लिए धन्यवाद! क्या तब एक गैर-ऐप्पल लिंकर लेने का कोई तरीका है? –

+0

ऐसा लगता है कि जीएनयू लिंकर का उपयोग करना संभव नहीं है ([मैक ओएस एक्स 10.6 पर gnu ld कैसे स्थापित करें?] (Http://stackoverflow.com/questions/1608009/how-to-install-gnu-ld-on- मैक-ओएस-एक्स -10-6)), जो मूल रूप से इंगित करता है कि आपको साझा और स्थैतिक पुस्तकालयों को मिश्रित करने के लिए फ़ाइलों को चारों ओर स्थानांतरित करना होगा: एस –

0

हां, दुर्भाग्यवश, ओएस एक्स का उपयोग करके अंतर बना रहा है। -static कंपाइलर से आपको पूरी तरह से स्थिर रूप से जुड़े निष्पादन योग्य (ओएस एक्स पर समर्थित नहीं) देने के लिए कह रहा है, और जैसा कि एडियल ने इंगित किया है, -ब्लूएल,-स्थिर और गतिशील लिंकिंग मिश्रण के लिए बस्टैटिक ऐप्पल के क्लैंग लिंकर द्वारा समर्थित नहीं है।

मैक पर कोशिश इस समस्या को हल पाने के लिए:

g++ myapp.cpp libfoo.a libbar.a

अपने संकलन पंक्ति के रूप में

(जहां पुस्तकालय के नाम कमांड लाइन पर अपने स्रोत का पालन करें)। यह आपको मैप को फू और बार पुस्तकालयों से स्थिर रूप से लिंक करेगा, जबकि अन्य आवश्यक पुस्तकालयों को गतिशील रूप से जोड़ा जाएगा।

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