2010-12-28 11 views
11

के बीच अंतर एलडीएफएलजीएस के माध्यम से gcc_s और gcc के खिलाफ जोड़ने के बीच क्या अंतर है? क्या gcc_s एक स्थिर पुस्तकालय और जीसीसी साझा लाइब्रेरी है?-lgcc_s और gcc

क्योंकि मैं एक ऐसे समाधान की तलाश में था जहां जीसीसी के खिलाफ लिंक करने का उल्लेख किया गया है जबकि केवल मेरे मामले में gcc_s काम करता है। मैं असली अंतर जानना चाहता हूं।

< < छिपा प्रतीक `/some/library/path.a(_filename.o में __name_here ') DSO

इस मामले में द्वारा संदर्भित है, समस्या आमतौर पर या तो" -l जीसीसी जोड़कर हल किया जाता है "या" gcc -print-libgcc-file-name "लिंकिंग झंडे (एलडीएफएलजीएस) में। हालांकि, मेरे अन्य नियमित प्लेटफ़ॉर्म (i386, amd64, sparc64) के विपरीत यहां यह पर्याप्त नहीं था। बहुत सारे सिर-बैंगिंग के बाद (निष्पक्ष होने के लिए, यह संगीत से भी आता है) मुझे एहसास हुआ कि यह ध्वज आवश्यक है जब libc और अंतिम निष्पादन योग्य फ़ाइल को लिंक करते समय यह ध्वज आवश्यक है। लिंक: http://people.defora.org/~khorben/200903.html

+0

'libgcc_eh.a' भी है, जिसका उपयोग' -स्टैटिक 'के दौरान किया जाता है। http://stackoverflow.com/questions/10763394/how-to-build-ac-program-using-a- कस्टम-version-of-glibc-and-static- लिंकिंग –

उत्तर

12

libgcc_s.so, एक साझा पुस्तकालय है libgcc.a एक स्थिर पुस्तकालय है। वे बराबर नहीं हैं; दोनों को लिंक करना आवश्यक हो सकता है। libgcc_s में वैश्विक चर शामिल हैं जिनके पास प्रक्रिया में एकाधिक प्रतियां नहीं होनी चाहिए; libgcc में कोड कई बार लिंक करने के लिए सुरक्षित है।

+0

हाय, धन्यवाद, << यह आवश्यक हो सकता है दोनों को जोड़ने के लिए। जब यह आवश्यकता उत्पन्न होगी? – kumar

+3

@ कुमार: कुछ प्रतीकों (उदा। '__register_frame') केवल libgcc_s में हैं, अन्य (उदा।' __eprintf') केवल libgcc में हैं। 'एनएम-डी - परिभाषित-केवल libgcc_s.so' resp का उपयोग करें। तुलना करने के लिए पूर्ण सूचियों को प्राप्त करने के लिए 'nm --defined-only libgcc.a'। –

+1

हमें दोनों की आवश्यकता क्यों है? वे एक जैसे नहीं हैं, केवल एक स्थिर और अन्य गतिशील? –

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