मेरे पास एक साझा लाइब्रेरी है जिसे मैं जीसीसी का उपयोग करने के खिलाफ निष्पादन योग्य लिंक करना चाहता हूं। साझा लाइब्रेरी का एक गैर-मानक नाम है जिसका नाम libNAME.so है, इसलिए मैं सामान्य -l विकल्प का उपयोग नहीं कर सकता। (यह एक पायथन एक्सटेंशन भी होता है, और इसलिए कोई 'lib' उपसर्ग नहीं है।)बिना किसी पुस्तकालय के जीसीसी के बिना जीसीसी का उपयोग कैसे करें और न ही लाइब्रेरी के लिए हार्डकोडिंग पथ जो libNAME.so नामकरण सम्मेलन का पालन नहीं करता है?
मैं लाइब्रेरी फ़ाइल के पथ को सीधे लिंक कमांड लाइन पर पास करने में सक्षम हूं, लेकिन इससे लाइब्रेरी पथ होने का कारण बनता है निष्पादन योग्य में हार्डकोडेड।
उदाहरण के लिए:
g++ -o build/bin/myapp build/bin/_mylib.so
वहाँ निष्पादन में hardcoded जा करने के लिए पथ पैदा करने के बिना इस लाइब्रेरी से जोड़ने के लिए एक तरीका है?
यह, महोदय, वही है जो मैं ढूंढ रहा था। धन्यवाद! – kbluck
मुझे बहुत मदद की, धन्यवाद। –
मुझे लगता है कि यह परिणाम 'build/bin/_mylib.so' में लाइब्रेरी में एम्बेड किया गया है जो '-l:' का उपयोग करके लिंक किया गया था - केवल' _mylib.so' को एम्बेड करने के बजाय, यह सामान्य रूप से मानक sonames के लिए करता है। नतीजतन, जब आप '_mylib.so' लोड करने का प्रयास करते हैं, तो वह उस पूर्ण पथ की तलाश करेगा (' ldd' इसे दिखाएगा) और उसे '_mylib.so' नहीं मिलेगा। –