Linux에서 GCC (v.6.1.1)에 의해 컴파일 된 공유 C++ 라이브러리의 거대한 크기를 분석 할 수 있습니다.C++ 기호 분석 : 정적 초기화를 수행하는 방법을 결정하는 방법은 무엇입니까?
readelf -sW libfoo.so
는 예컨대 __static_initialization_and_destruction_0
라는 특히 큰 기능이있는 것을 저에게 말한다 : 나는 링커 맵 파일을 생성하는 -Wl,-Map,foo.map
CXX
에 플래그를 추가
000000000026c420 10272 FUNC LOCAL DEFAULT 12 __static_initialization_and_destruction_0(int, int) [clone .constprop.1774]
. 그 맵 파일 수익률
0x000000000026c420
찾고 :
.text.startup 0x000000000026c420 0x2825 CMakeFiles/foo.dir/bar.cpp.o
을 그래서 지금 내가 bar.cpp
정적 초기화를 일으키는 원인이되는 번역 단위는 것을 알고 있지만 파일이 어떤 static
변수를 포함하지 않는 말했다. 그러나 많은 헤더가 포함됩니다.
정확히 어떤 변수가 해당 함수에서 정적으로 초기화되어 있는지 어떻게 알 수 있습니까? 와 프로그램 컴파일
_ #이 _'정적 ios_base :: 초기화 __ioinit을 정의을 포함한다. –
Viatorus