2008-10-16 5 views
36

मेरे पास एक साझा लाइब्रेरी है जिसे मैं जीसीसी का उपयोग करने के खिलाफ निष्पादन योग्य लिंक करना चाहता हूं। साझा लाइब्रेरी का एक गैर-मानक नाम है जिसका नाम libNAME.so है, इसलिए मैं सामान्य -l विकल्प का उपयोग नहीं कर सकता। (यह एक पायथन एक्सटेंशन भी होता है, और इसलिए कोई 'lib' उपसर्ग नहीं है।)बिना किसी पुस्तकालय के जीसीसी के बिना जीसीसी का उपयोग कैसे करें और न ही लाइब्रेरी के लिए हार्डकोडिंग पथ जो libNAME.so नामकरण सम्मेलन का पालन नहीं करता है?

मैं लाइब्रेरी फ़ाइल के पथ को सीधे लिंक कमांड लाइन पर पास करने में सक्षम हूं, लेकिन इससे लाइब्रेरी पथ होने का कारण बनता है निष्पादन योग्य में हार्डकोडेड।

उदाहरण के लिए:

g++ -o build/bin/myapp build/bin/_mylib.so 

वहाँ निष्पादन में hardcoded जा करने के लिए पथ पैदा करने के बिना इस लाइब्रेरी से जोड़ने के लिए एक तरीका है?

उत्तर

57

इस्तेमाल कर सकते हैं नहीं है ":" उपसर्ग आप अपने पुस्तकालयों के लिए अलग-अलग नाम देने के लिए अनुमति देता है। आप

g++ -o build/bin/myapp -l:_mylib.so other_source_files 

का उपयोग करते हैं _mylib.so के लिए अपना रास्ता खोज करनी चाहिए।

+1

यह, महोदय, वही है जो मैं ढूंढ रहा था। धन्यवाद! – kbluck

+0

मुझे बहुत मदद की, धन्यवाद। –

+2

मुझे लगता है कि यह परिणाम 'build/bin/_mylib.so' में लाइब्रेरी में एम्बेड किया गया है जो '-l:' का उपयोग करके लिंक किया गया था - केवल' _mylib.so' को एम्बेड करने के बजाय, यह सामान्य रूप से मानक sonames के लिए करता है। नतीजतन, जब आप '_mylib.so' लोड करने का प्रयास करते हैं, तो वह उस पूर्ण पथ की तलाश करेगा (' ldd' इसे दिखाएगा) और उसे '_mylib.so' नहीं मिलेगा। –

2

आप काम कर निर्देशिका जब जी ++ तो शुरू हो जाती है करने के लिए शेयर की गई लाइब्रेरी कॉपी कर सकते हैं अगर यह काम करना चाहिए:

g++ -o build/bin/myapp _mylib.so other_source_files 
1

मुझे लगता है कि आप यूनिक्स या लिनक्स पर हैं, तो आप में पुस्तकालय के लिए एक प्रतीकात्मक कड़ी बना सकते हैं निर्देशिका आप पुस्तकालय चाहते हैं।

उदाहरण के लिए:
ln -s build/bin/_mylib.so build/bin/lib_mylib.so

फिर आप -l_mylib

http://en.wikipedia.org/wiki/Symbolic_link

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

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