2011-02-13 8 views
5

सबसे पहले मेरे पास "include_HEADERS = 'मेरे सार्वजनिक शीर्षलेख' और" libfoobar_la_SOURCES = 'निजी स्रोत' 'निजी शीर्षलेख' 'हैं। सब ठीक है। यह संकलित/स्थापित/लिंक। लेकिन जब मैं करता हूँ "एनएम -सी my_instaed_lib.so" मैं मिलता है:automake + libtool + C++ = बहुत फूला हुआ इंटरफ़ेस

00005be0 T yyget_debug(void*) 
00005b00 T yyget_extra(void*) 
00005bf0 T yyset_debug(int, void*) 
00005bb0 T yyset_extra(FM4::LexImpl*, void*) 
00005b40 T yyget_column(void*) 
00005b10 T yyget_lineno(void*) 
00006180 T yyset_column(int, void*) 
000061e0 T yyset_lineno(int, void*) 
... 

यह किसी भी शीर्षक में घोषित कभी नहीं।

000091f0 T FM4::PrcImpl::CollectMacro() 
000089d0 T FM4::PrcImpl::CollectQuote() 
00008870 T FM4::PrcImpl::CollectComment() 
00009350 T FM4::PrcImpl::Collect() 
000093f0 T FM4::PrcImpl::Process() 
00008700 T FM4::PrcImpl::PrcImpl(FM4::Processor*) 
00008590 T FM4::PrcImpl::PrcImpl(FM4::Processor*) 
00009970 W FM4::PrcImpl::~PrcImpl() 
00009a00 W FM4::PrcImpl::~PrcImpl() 
... 

यह निजी स्थापित हेडर में नहीं है।

मैंने ऑटोमैक/libtool मैन्युअल दो बार पढ़ा है, लेकिन मुझे नहीं पता कि इस बकवास को इंटरफ़ेस से कैसे पट्टी करें? या सार्वजनिक एपीआई के लिए इस बकवास का पर्दाफाश क्या कर सकता है। सार्वजनिक एपीआई को निर्यात करने का नियंत्रण कैसे किया जाता है?

+0

आप फ्लेक्स/लेक्स के साथ कुछ करते हैं? – Anycorn

+0

हां। पुनर्विक्रेता फ्लेक्स लेक्सर लेकिन किसी भी शीर्षलेख में घोषित नहीं किया गया है। – SQLek

उत्तर

8

libtool विकल्प -export-symbols के लिए देखो। इसे उन प्रतीकों की एक सूची दें जिन्हें आप निर्यात करना चाहते हैं। डिफ़ॉल्ट रूप से, libtool सभी प्रतीकों का निर्यात करता है।

3

यदि आप साहसी हैं, और यह सुनिश्चित कर सकते हैं कि आप एक नए पर्याप्त जीसीसी (मुझे लगता है कि support4.2 अच्छा समर्थन के लिए आवश्यक है) के साथ संकलित हो रहा है, visibility मदद कर सकता है।

डिफ़ॉल्ट दृश्यता (-fvisibility=hidden) को प्रतिबंधित करें और उन कार्यों को स्पष्ट रूप से चिह्नित करें जिन्हें आप __attribute__((visibility("default"))) के साथ निर्यात करना चाहते हैं।

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