2010-06-30 15 views

उत्तर

4

आप बाइनरी में निर्यात प्रतीकों सूची nm कमांड लाइन उपकरण का उपयोग कर सकते हैं:

~/src> cat nm-test.c 

static int plus_four(int x) 
{ 
     return x + 4; 
} 

int sum_plus_four(int a, int b) 
{ 
     return plus_four(a + b); 
} 

int product_plus_four(int a, int b) 
{ 
     return plus_four(a * b); 
} 
~/src> gcc -c nm-test.c 
~/src> nm ./nm-test.o 
00000000 t plus_four 
00000023 T product_plus_four 
0000000b T sum_plus_four 

the manual के अनुसार, 'टी' का मतलब है कि प्रतीक कोड (पाठ) खंड में है, और बड़े साधन यह सार्वजनिक है।

यदि आपके पास कोई प्रतीक है जिसे आप ढूंढ रहे हैं, तो आप nm का उपयोग कर सकते हैं ताकि पुस्तकालय द्वारा उपलब्ध प्रतीकों को निर्यात किया जा सके। grep:

$ find -name lib*.a /example/library/path | xargs nm | grep -E "T $SYMBOL_TO_FIND" 

यह कमांड लाइन एक अनचाहे स्केच है, लेकिन इसे अवधारणा को दिखाना चाहिए।

+0

क्या यह फ़ंक्शन नाम दिए गए लाइब्रेरी के बजाय लाइब्रेरी दिए गए फ़ंक्शन नाम नहीं ढूंढता है? –

+0

@Pete: सच है, लेकिन चूंकि यह जानकारी निर्यात करता है, इसका उपयोग पुस्तकालय फ़ाइलों पर grep के लिए किया जा सकता है। – unwind

+0

धन्यवाद .. मुझे मिल गया .. – Dinesh

1

यदि यह सी मानक एपीआई का हिस्सा है तो बस man चलाएं, यह स्पष्ट रूप से बताएगा कि फ़ंक्शन को परिभाषित किया गया है।

+0

और यदि ऐसा नहीं है, तो लाइब्रेरी दस्तावेज संभवतः बताता है कि इसे कैसे लिंक करें। – nos

1

यदि आप गैर-प्रोग्रामेटिक तरीके से लाइब्रेरी को खोजना चाहते हैं, तो आपको LSB Navigator उपयोगी मिल सकता है। खोज बॉक्स में फ़ंक्शन दर्ज करें, और हरे रंग की "स्थिति" के साथ लाइन में लाइब्रेरी की जांच करें।

http://coldattic.info/pic/165509391387.png

यह (उदाहरण के ऊपर दर्शाया में, librtmq_unlink के लिए सही पुस्तकालय है, इसलिए आप -lrt के साथ लिंक) "पारंपरिक" पुस्तकालय समारोह में शामिल है कि हो जाएगा। बस उस पुस्तकालय से लिंक करें, और यह लगभग सभी लिनक्स सिस्टम पर काम करेगा।

नोट: मैं सुझाए गए टूल के डेवलपर्स में से एक था।

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