मेरे पास एक प्रोग्राम है, myprogram
, जो स्थिर सुविधा लाइब्रेरी से जुड़ा हुआ है, इसे libconvenience.a
पर कॉल करें, जिसमें एक फ़ंक्शन, func()
शामिल है। फ़ंक्शन func()
को myprogram
में कहीं भी नहीं कहा जाता है; इसे प्लगइन लाइब्रेरी, plugin.so
से कॉल करने में सक्षम होना चाहिए।सुविधा लाइब्रेरी से प्रतीकों को निष्पादन योग्य में निर्यात नहीं किया जा रहा है
प्रतीक func()
myprogram
में गतिशील रूप से निर्यात नहीं हो रहा है। अगर मैं
nm myprogram | grep func
मुझे कुछ भी नहीं मिलता है। हालांकि, यह libconvenience.a
से गायब नहीं है:
nm libconvenience/libconvenience.a | grep func
00000000 टी समारोह
मैं automake उपयोग कर रहा हूँ, लेकिन अगर मैं बजाय कमांड लाइन पर हाथ से पिछले जोड़ने कदम करते हैं, यह या तो काम नहीं करता है:
gcc -Wl,--export-dynamic -o myprogram *.o libconvenience/libconvenience.a `pkg-config --libs somelibraries`
हालांकि, अगर मैं इस तरह कार्यक्रम जुड़ी हों, एक सुविधा पुस्तकालय के उपयोग को छोड़ने और वस्तु फ़ाइलों कि 01 में चला गया होता जोड़नेसीधे, func()
अप myprogram
में पता चलता है: रों प्रतीकों के प्रतीक के रूप में यह होना चाहिए
gcc -Wl,--export-dynamic -o myprogram *.o libconvenience/*.o `pkg-config --libs somelibraries`
मैं myprogram
में कहीं func()
को एक डमी कॉल जोड़ते हैं, तो func()
भी myprogram
में पता चलता '। लेकिन मैंने सोचा कि --export-dynamic
को सभी प्रतीकों को निर्यात करना था चाहे वे प्रोग्राम में इस्तेमाल किए गए हों या नहीं!
मैं automake 1.11.1 और जीसीसी 4.5.1 का उपयोग कर रहा फेडोरा 14. मैं भी Libtool 2.2.10 का उपयोग कर रहा plugin.so
का निर्माण करने पर (लेकिन सुविधा पुस्तकालय।)
मैं भूल नहीं था डाल करने के लिए myprogram_LDFLAGS
में -Wl,--export-dynamic
, न ही मैं स्रोत है कि libconvenience_a_SOURCES
में func()
शामिल डाल करने के लिए भूल गए हैं (कुछ Googling पता चलता है कि इन इस समस्या का आम कारण हैं।)
किसी मदद कर सकते हैं मुझे समझने यहाँ क्या चल रहा है?
यह सच है, लेकिन मैं स्पष्ट रूप से करने के लिए _not_ समारोह की जरूरत है प्लगइन में रहें, क्योंकि func एक एपीआई का हिस्सा है कि कई प्लगइन्स को कॉल करने की आवश्यकता होती है। प्लगइन्स कहीं और लिखे गए थे और मैं उन्हें स्थानीय संशोधनों से बचने की कोशिश कर रहा हूं। – ptomato