2014-07-16 5 views
1

컨텍스트 : 네트워크를 통해 실행 파일을 전송하는 프로그램이 있습니다. 이 실행 파일은 너무 큽니다. 따라서 연결된 공유 객체에 ldd -u bigFoo.so을 실행했습니다. 이것은 내가 공연을 통해 점유하고 있던 사용되지 않는 공유 객체 파일이 아주 많다는 것을 나타 냈습니다.어떤 소스 코드가 불필요한 지 빨리 결정하는 스크립트

질문 : bigFoo.so로 연결되어 있습니다 (ldd -u 계시) C++ 소스를 컴파일하고 bigFoo.so에 링크되는 코드 foo.ccunused.so의 조각을 감안할 때, 스크립트 또는 신속하게 확인할 수 있습니다 쉘 명령의 순서가 무슨 foo.cc에서 호출 unused.so의 연결을 일으킬?

+0

하지만 ... ... 링크 된 파일은 프로그램 실행 파일의 일부이며 런타임에 링크가 있습니다. – lornix

답변

1

-Wl,-MCXXFLAGS에 추가 한 후 다시 컴파일하십시오. '아카이브 회원 포함 ...'검색, 다음 행은 파일에 포함 된 라이브러리 및 해당 기능을 요청한 기능을 보여줍니다.

예 :

gcc -std=gnu99 -O0 -Wall -Wextra -Wunused -Wl,-M -c showmmap.c -o showmmap.o 
gcc -std=gnu99 -O0 -Wall -Wextra -Wunused -Wl,-M showmmap.o -o showmmap 
Archive member included to satisfy reference by file (symbol) 

/usr/lib/x86_64-linux-gnu/libc_nonshared.a(elf-init.oS) 
           /usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/crt1.o (__libc_csu_init) 
/usr/lib/x86_64-linux-gnu/libc_nonshared.a(fstat.oS) 
           showmmap.o (fstat) 

Discarded input sections 
--------8<--snip--->8----- 

나는 다른 도서관으로 당겨 뭔가를 찾을 수 내 문서 보관소에 주위를 발굴했다. 이 예에서 __libc_csu_initfstat은 다른 아카이브 멤버를 포함하도록 요청한 함수입니다.

-Wl,-M 옵션의 출력은 ... 오히려 방대한이다, 파이프에 내가 여기에 표시 한 것은 있지만, 파일 또는 less

를 통해 출력 확인의 바로 머리에서 조그마한 조각 산출. 많은 라이브러리 루틴이 포함되어있을 가능성이 높다는 사실을 감안할 때 출력은 더 길어야합니다.