컴파일 된 라이브러리에 포함 된 사용 가능한 기능 등을 어떻게 나열 하시겠습니까?
문제
라이브러리 내에 함수가 존재하는지 또는 컴파일 된 라이브러리에 함수를 나열하는지 어떻게 결정합니까?
해결책
당신은 사용할 수 있습니다 nm 정적 라이브러리에 기호를 나열하도록 명령.
nm -g -C <libMylib.a>
다른 팁
ELF Binaries의 경우 Readelf를 사용할 수 있습니다.
readelf -sW a.out | awk '$4 == "FUNC"' | c++filt
-s
: 목록 기호-W
: 너무 긴 이름을 자르지 마십시오
그런 다음 AWK 명령은 모든 기능을 필터링하고 C ++ Filt는이를 완화시킵니다. 즉, 내부 명명 체계에서 변환하여 인간 읽기 가능한 형태로 표시됩니다. 이와 유사한 이름을 출력합니다 (boost.filesystem lib에서 가져온) :
285: 0000bef0 91 FUNC WEAK DEFAULT 11 boost::exception::~exception()
C ++ Filt가 없으면 이름이 다음과 같이 표시됩니다. _ZN5boost9exceptionD0Ev
Microsoft 도구의 경우 "link /dump /symbols <filename>
"Gory 세부 사항을 제공 할 것입니다. 아마도 읽기 쉬운 목록을 제공하는 다른 방법 (또는 옵션)이있을 것입니다.
Linux/Unix에서 사용할 수 있습니다 objdump -T
주어진 객체에 포함 된 내보내기 기호를 나열합니다. 창문 아래에 있습니다 dumpbin
(IIRC dumpbin /exports
). 오버로드를 허용하기 위해 C ++ 기능 이름이 엉망이됩니다.
편집 : CodeLogic을 본 후 Anwser 나는 Objdump도 -C를 이해하는 것을 이해한다는 것을 기억했다.
이 명령 사용 :
objdump -t "Your -library"
기능 이름뿐만 아니라 전체 기호 테이블이 원하는 것보다 더 많이 인쇄됩니다. 받는 기호의 다양한 속성을 확인하면 변수와 물건에서 함수를 정리할 수 있습니다.