예를 들어
트레이아이콘 동작이 필요해 샘플탭의 TTrayIcon 컴포넌트를
디자인하는 윈도에 떨군뒤 작업하다가... 아.. 필요없어도 되겠다 싶어
화면 디자인 윈도에서 컴포넌트를 지웁니다.
그런데 컴파일 한 결과물은 컴포넌트를 포함했을 때와 마찬가지로
한 100k 이상 실행화일 크기가 커진채 그대로 있네요.
그래서
#pragma link "trayicon"
트레이아이콘 오브젝트를 링크하는 부분을 지우고
#include "trayicon.h" 도 지우고, (헤더는 파일크기와 상관없지만 link 옵션이 있을수도 있고 쓰지 않는 include하는 것 자체가 좋지 않은 습관이라서)
다시 컴파일 해봐도 안 줄어 듭니다.
전혀 필요없는 라이브러리가 붙어 떨어지지 않는 겁니다.
컴포넌트 필요없어 지웠는데 파일크기는 줄지 않네??
볼랜드가 스마트링킹 기술을 확보한 것은 TC 2.0 이전부터인데...
왜 스마트링킹이 안되는거야?
이런 경우는 *.bpr 파일을 다른 에디터로 열어서 보면
<LIBRARIES value="rtl.lib vcl.lib bcbsmp.lib vclx.lib"/>
<SPARELIBS value="vcl.lib rtl.lib bcbsmp.lib vclx.lib"/>
이 문제의 원인임을 즉시 알수 있습니다.
bcbsmp.lib 샘플컴포넌트 오브젝트들
vclx.lib 크로스플랫폼용 VCL 사용시 필요한 라이브러리.
보통 vclx.lib 는 물론 필요없고
샘플 탬에 있는 컴포넌트를 안 쓸 의도이므로 bcbsmp.lib 도 물론 필요없습니다
위 2 줄에서 2항목을 모두 지우고 저장하고
빌더에서 다시 프로젝트를 로딩해서 컴파일 합니다.
그러면 트레이아이콘 컴포넌트를 추가하기전의 크기로 돌아갑니다.
이 예는 트레이 아이콘을 가지고 설명한 것인데, 다른 경우도 마찬가지입니다.
C++ 환경의 복잡성으로 스마트링킹 서비스가 원하는대로 동작하지 않는 것은 아쉬우나
이렇게 수동으로라도 처리를 할 수 있다는 것은 다행한 일입니다. ㅡ..ㅡ;
|