एक प्रोजेक्ट में, मेरे सहयोगी एक स्थिर पुस्तकालय बनाते हैं, उदाहरण के लिए liba.a, जो ऐप से जुड़ा हुआ है।मैं libc.a को बांह-लिनक्स उपयोग में साझा लाइब्रेरी में कैसे साझा कर सकता हूं arm-none-linux-gnueabi-gcc
liba.a में वह libc malloc() को अपने स्वामी संस्करण में ओवरराइट करता है।
मैं एक साझा लाइब्रेरी libs.so बनाता हूं जो ऐप से भी जुड़ा हुआ है।
समस्या यह है कि जब मेरी libs.so ऐप के साथ जुड़ा हुआ है, तो मेरी libs.so में इस्तेमाल किया जाने वाला malloc() liba.a, में मानक libc.so में से एक नहीं होगा, इससे समस्याएं पैदा होती हैं।
फिर, मैं libc.a को मेरी libs.so पर स्थिर लिंक चाहता हूं, मैंने जीसीसी के लिए -स्टिक-शेर-एफपीआईसी झंडे का उपयोग किया।
लेकिन मुझे हमेशा हाथ-2012.03/बिन /../ lib/gcc/arm-none-linux-gnueabi/4.6.3 /../../../../ arm-none-linux मिलता है -gnueabi/bin/ld: arm-2012.03/bin /../ arm-none-linux-gnueabi/libc/usr/lib/libc.a (dl-tsd.o) (। text + 0x14): R_ARM_TLS_LE32 स्थानांतरण नहीं साझा वस्तु में अनुमति दी।
क्या किसी के बारे में कोई विचार है?
धन्यवाद आगे।
मुझे लगता है -स्टैटिक -शेयर को मिश्रित नहीं किया जाना चाहिए .... – Jeyaram
निम्नलिखित पाठ को ld.pdf से कोडगर्गेरी से कॉपी किया गया है: "-स्टैटिक साझा पुस्तकालयों के खिलाफ लिंक न करें। यह केवल प्लेटफॉर्म पर सार्थक है जिसके लिए साझा किया गया है पुस्तकालयों का समर्थन किया जाता है। ** यह विकल्प '-shared' ** के साथ उपयोग किया जा सकता है। ऐसा करने का अर्थ है कि साझा लाइब्रेरी बनाई जा रही है, लेकिन सभी लाइब्रेरी के बाहरी संदर्भों को स्थिर पुस्तकालयों से प्रविष्टियों में खींचकर हल किया जाना चाहिए । " –
@ डेविड कही: केवल यही कहता है- स्टेटिक और शेर मिश्रित किया जा सकता है, लेकिन यह नहीं कि यह एक अच्छा विचार है। सामान्यतः कंपाइलर्स में कई विकल्प होते हैं जो सामान्य अनुप्रयोगों के लिए उपयोग करने के लिए एक अच्छा विचार नहीं हैं। वे कर्नेल, बूटलोडर, माइक्रोकंट्रोलर कोड और इस तरह के संकलन जैसे विशेष मामलों के लिए महत्वपूर्ण हैं। –