ऑब्जेक्ट फ़ाइलों में प्रतीकों को कैसे देखें?


83

मैं .o फ़ाइल में प्रतीकों को कैसे देख सकता हूं? एनएम मेरे लिए काम नहीं करता है। मैं g ++ / linux का उपयोग करता हूं।


5
एनएम बिल्कुल वही है जो आप उपयोग करेंगे। क्या आप बता सकते हैं कि यह आपके लिए कैसे काम नहीं करता है?
nos

1
यह कहता है:nm: Lib1.o: File format not recognized
10

4
@nakiya: भागो file Lib1.oऔर हमें बताओ कि आउटपुट क्या है।
डार्कडस्ट ऑक्ट

4
@nakiya आप एक .o फ़ाइल नहीं चला सकते। और यदि आप एक हेडर फ़ाइल संकलित करते हैं तो आप हाल ही में gcc संस्करणों के साथ precompiled हेडर का उत्पादन करते हैं, ऑब्जेक्ट फ़ाइलों का नहीं। आपको .cpp फ़ाइलों को हेडर फ़ाइलों को संकलित करना चाहिए।
nos

1
@nakiya: आप इसे नहीं चला सकते, आपको file Lib1.oअपने शेल में वास्तव में " " पाठ लिखना चाहिए । नामक उपकरण fileआपको Lib1.o का फ़ाइल प्रकार बताता है, अर्थात यह वास्तव में एक ऑब्जेक्ट फ़ाइल है। मुझे शक है।
डार्कडस्ट

जवाबों:


101

इसके बजाय nm, आप शक्तिशाली का उपयोग कर सकते हैं objdump। विवरण के लिए मैन पेज देखें। कोशिश करो objdump -t myfileया objdump -T myfile-Cध्वज के साथ आप C ++ नामों को भी अलग कर सकते हैं, जैसे nmकि।


1
मैंने ओबजडम्प को भी आजमाया। वही परिणाम:objdump: Lib1.o: File format not recognized
11

2
कोशिशobjdump -t Lib1.o
मुस्तफा

13

क्या आप किसी अन्य प्लेटफ़ॉर्म के लिए क्रॉस-कंपाइलर का उपयोग कर रहे हैं? यदि हां, तो आपको संबंधित nmया objdumpकमंड का उपयोग करने की आवश्यकता है ।

उदाहरण के लिए, यदि आपने XXX-YYY-gcc.o फ़ाइल को संकलित करने के लिए उपयोग किया है, तो आपको फ़ाइलों का उपयोग करने XXX-YYY-nmया XXX-YYY-objdumpसंसाधित करने की आवश्यकता है ।



4

किसी ऑब्जेक्ट फ़ाइल या लाइब्रेरी या निष्पादन योग्य में कौन से फ़ंक्शंस शामिल हैं, इस पर एक नज़र रखने का आदेश है:

nm

4
ओपी ने सीधे कहा कि वह उपयोग नहीं कर सकता nm
ivan_pozdeev

2

आप nm -C .o/lib/exeउदाहरण के लिए उपयोग कर सकते हैं :

xiongyu@ubuntu:~/tmp/build$ nm -C libfile1.a 

file1.cpp.o:
0000000000000000 T f()
0000000000000000 W int fun<int>(int)

nm -Cइसका उपयोग अधिक पठनीय होगा , यदि आप इसका उपयोग करते हैं nm:

xiongyu@ubuntu:~/tmp/build$ nm libfile1.a 

file1.cpp.o:
0000000000000000 T _Z1fv
0000000000000000 W _Z3funIiET_S0_

जैसा कि हम देखते हैं कि यह इतना पठनीय नहीं है।

नीचे मेरी file1.cppपसंद है:

xiongyu@ubuntu:~/tmp/build$ vi ../file1.cpp 
#include "head.h"
void f()  {
     int i = fun<int>(42);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.