2011-08-27 7 views
17

मैंने हाल ही में जीएनयू एलडी में लिंकर विकल्प "-स्सिम्बोलिक-फ़ंक्शंस" की खोज की है:क्या Bsymbolic- कार्यों का उपयोग करने के लिए एक नकारात्मक पक्ष है?

-Bsymbolic 
    When creating a shared library, bind references to global symbols to the 
    definition within the shared library, if any. Normally, it is possible 
    for a program linked against a shared library to override the definition 
    within the shared library. 

    This option is only meaningful on ELF platforms which support shared libraries. 

-Bsymbolic-functions 
    When creating a shared library, bind references to global function symbols 
    to the definition within the shared library, if any. 

    This option is only meaningful on ELF platforms which support shared libraries. 

यह जीसीसी विकल्प -fvisibility=hidden के विपरीत है, जिसमें संदर्भित फ़ंक्शन के निर्यात को अन्य साझा करने से रोकने के बजाय ऑब्जेक्ट्स, यह उस फ़ंक्शन के लाइब्रेरी-आंतरिक संदर्भों को किसी भिन्न साझा ऑब्जेक्ट के निर्यात किए गए फ़ंक्शन से बाध्य होने से रोकता है। मैंने खुद को सूचित किया कि -Bsymbolic-functions कार्यों के लिए पीएलटी प्रविष्टियों के निर्माण को रोक देगा, जो एक अच्छा साइड इफेक्ट है।

  1. लेकिन मैं सोच रहा था कि पुस्तकालय की व्यक्तिगत फ़ंक्शन परिभाषाओं के लिए -Bsymbolic ओवरराइट करने की तरह, इस पर शायद एक बेहतर अनाज वाला नियंत्रण है या नहीं।

  2. क्या मुझे -Bsymbolic-functions का उपयोग करने के किसी भी नुकसान के बारे में पता होना चाहिए? मैं केवल इसका उपयोग करने की योजना बना रहा हूं, क्योंकि -Bsymbolic अपवाद तोड़ देगा, मुझे लगता है (यह ऐसा करेगा जिससे टाइपिनो ऑब्जेक्ट्स के संदर्भ एकीकृत नहीं हैं, मुझे लगता है)।

धन्यवाद!

+1

आप मेरे लिए लिंकर नरक के घंटों तक शानदार, खुश संकल्प थे। मैं तुमसे प्यार करता हूँ। –

उत्तर

19

मेरे अपने प्रश्न का उत्तर देना क्योंकि मैं सिर्फ इसके लिए एक Tumbleweed बैज मिला ... और मुझे बाद में

पता चला लेकिन मैं सोच रहा था वहाँ शायद है कि क्या एक बेहतर सुक्ष्म इस पर नियंत्रण, -Bsymbolic अधिलेखन की तरह पुस्तकालय की व्यक्तिगत कार्य परिभाषाओं के लिए।

हाँ, वहाँ विकल्प --dynamic-list जो करता है वास्तव में

मैं -Bsymbolic-functions का उपयोग कर के किसी भी नुकसान के बारे में पता होना चाहिए है? मैं केवल इसका उपयोग करने की योजना बना रहा हूं, क्योंकि -स्सिंबोलिक अपवाद तोड़ देगा, मुझे लगता है (यह ऐसा करेगा जिससे टाइपिनो ऑब्जेक्ट्स के संदर्भ एकीकृत नहीं हैं, मुझे लगता है)।

मैं इस पर अधिक देखा है, और ऐसा लगता है कोई समस्या नहीं है। LibstdC++ लाइब्रेरी स्पष्ट रूप से करता है या कम से कम इसे मानता है और उन्हें केवल --dynamic-list-cpp-new को operator new एकीकृत करने के लिए जोड़ना पड़ता है (प्रोग्राम में मिश्रित एकाधिक आवंटक/डेलोकॉटर के साथ समस्याओं को रोकने के लिए, लेकिन मैं तर्क दूंगा कि ऐसे प्रोग्राम किसी भी तरह से टूट गए हैं)। उबंटू इसका उपयोग करता है या डिफ़ॉल्ट रूप से इसका इस्तेमाल करता है, और ऐसा लगता है कि यह कुछ संकुलों के साथ संघर्ष का कारण बनता है। लेकिन समग्र रूप से मुझे अच्छी तरह से काम करना चाहिए।

+0

एक गड़बड़ यह है कि '- गतिशील-सूची' और '-स्सिम्बोलिक *' का उपयोग एक ही समय में सोने के वर्तमान संस्करणों में जारी किया गया है (यह बीएफडी एलडी में ठीक है), https://sourceware.org/bugzilla/ देखें show_bug.cgi?id = 13577 – thakis

+0

बेवकूफ सुझाव के लिए खेद है (मैं इसमें सक्षम नहीं हूं): क्या आपने देखा [यह] (https://software.intel.com/en-us/articles/performance-tools-for-software- डेवलपर -bsymbolic-कर सकते हैं-कारण-खतरनाक-साइड इफेक्ट)? (वे अधिक साइड इफेक्ट्स का वर्णन करते हैं, हालांकि शायद प्रतीकात्मक डेटा से संबंधित हैं, न कि '-सिम्बोलिक-फ़ंक्शंस'।) – Sasha

0

साइड इफेक्ट्स के मामले हैं। एक दस्तावेज एक: https://bugs.launchpad.net/ubuntu/+source/xfe/+bug/644645 मैं इसके बारे में अधिक जानकारी देना चाहूंगा, क्योंकि मेरे पास अभी ऐसा कोई मामला है।

0

बिल्डिंग ग्लिब के साथ -बिस्बोलिक-फ़ंक्शंस की सिफारिश नहीं की जाती है। यहां परिणाम मिला है:

Core was generated by `/home/lano1106/dev/packages/glibc/repos/core-i686/src/glibc-build/elf/ld-linux                .'. 
Program terminated with signal 11, Segmentation fault. 
#0 0x400a3e90 in _int_free() 
    from /home/lano1106/dev/packages/glibc/repos/core-i686/src/glibc-build/libc.so.6 
(gdb) where 
#0 0x400a3e90 in _int_free() 
    from /home/lano1106/dev/packages/glibc/repos/core-i686/src/glibc-build/libc.so.6 
#1 0x4016b94b in __libc_dlsym() 
    from /home/lano1106/dev/packages/glibc/repos/core-i686/src/glibc-build/libc.so.6 
#2 0x4004c2c7 in __gconv_find_shlib() 
    from /home/lano1106/dev/packages/glibc/repos/core-i686/src/glibc-build/libc.so.6 
#3 0x40042320 in find_derivation() 
    from /home/lano1106/dev/packages/glibc/repos/core-i686/src/glibc-build/libc.so.6 
#4 0x40042889 in __gconv_find_transform() 
    from /home/lano1106/dev/packages/glibc/repos/core-i686/src/glibc-build/libc.so.6 
#5 0x400d6f00 in __wcsmbs_load_conv() 
    from /home/lano1106/dev/packages/glibc/repos/core-i686/src/glibc-build/libc.so.6 
#6 0x400c86f6 in mbrtowc() 
    from /home/lano1106/dev/packages/glibc/repos/core-i686/src/glibc-build/libc.so.6 
#7 0x08048914 in ??() 
#8 0x00000000 in ??() 
संबंधित मुद्दे

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