개체 파일에서 기호를 보는 방법은 무엇입니까?


83

.o 파일에서 기호를 보려면 어떻게해야합니까? nm는 나를 위해 작동하지 않습니다. g ++ / linux를 사용합니다.


5
nm는 정확히 당신이 사용하는 것입니다. 어떻게 작동하지 않는지 설명해 주시겠습니까?
nos

1
그것은 말한다 :nm: Lib1.o: File format not recognized
nakiya

4
@nakiya : 실행 file Lib1.o하고 출력이 무엇인지 알려주세요.
DarkDust 2010 년

4
@nakiya .o 파일을 실행할 수 없습니다. 그리고 헤더 파일을 컴파일하면 객체 파일이 아닌 최신 gcc 버전으로 미리 컴파일 된 헤더가 생성됩니다. 헤더 파일이 아닌 .cpp 파일을 컴파일해야합니다.
nos

1
@nakiya : 실행할 수 없습니다 file Lib1.o. 쉘에 " " 텍스트를 입력해야 합니다. 라는 도구 file는 Lib1.o의 파일 유형, 즉 실제로 개체 파일인지 여부를 알려줍니다. 나는 그것을 의심한다.
DarkDust

답변:


101

대신 nm강력한 objdump. 자세한 내용은 man 페이지를 참조하십시오. 시도 objdump -t myfileobjdump -T myfile. -C플래그를 사용하면 C ++ 이름을 제거 할 수도 있습니다 nm.


1
ObjDump도 시도했습니다. 같은 결과 :objdump: Lib1.o: File format not recognized
nakiya

2
시도objdump -t Lib1.o
무스타파

13

다른 플랫폼에 크로스 컴파일러를 사용하고 있습니까? 그렇다면 각각 nm또는 objdump명령 을 사용해야합니다 .

예를 들어, XXX-YYY-gcc.o 파일을 컴파일하는 데 사용한 경우 파일을 사용 XXX-YYY-nm하거나 XXX-YYY-objdump처리해야합니다.



4

오브젝트 파일, 라이브러리 또는 실행 파일에 포함 된 함수를 살펴 보는 명령이 있습니다.

nm

4
OP는 그가 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);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.