A라는 라이브러리에 B, C, D 라는 함수가 있고 이 중에서 B 라는 함수만 사용할 경우에는 컴파일 한 바이너리에는 B 함수에 해당하는 코드만 포함되어 생성되는 것이 맞는지요? 바이너리 용량 때문에 고민중이던 차에 질문 드립니다...
동적라이브러리라면 애시당초 해당함수의 코드는 다른 바이너리에 포함되지 않습니다. 포함되는건 함수를 불러올때 참조할 심볼뿐입니다. 정적라이브러리라면 전부 포함됩니다.
링커에 따라 달라질 수 있습니다.
A.a[foo.o(B) bar.o(C,D)]
A 라는 라이브러리에 B,C,D 함수가 있고 이중 B 함수만 사용된다고 가정했을 때,
B 함수가 foo.c 파일에 포함되어 있다면, 링커가 bar.o를 제거할 수 도 있습니다.
실제로 그런지는 시험해 봐야 알것 같아요.
[참고] Preventing objects from being linked if they are not needed?http://stackoverflow.com/questions/2502922/preventing-objects-from-being-linked-if-they-are-not-needed
—— ——— Life is a tragedy when seen in close-up, but a comedy in long-shot. - Chaplin, Charlie -
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
동적라이브러리라면 애시당초 해당함수의 코드는
동적라이브러리라면 애시당초 해당함수의 코드는 다른 바이너리에 포함되지 않습니다.
포함되는건 함수를 불러올때 참조할 심볼뿐입니다.
정적라이브러리라면 전부 포함됩니다.
링커에 따라 달라질 수
링커에 따라 달라질 수 있습니다.
A.a[foo.o(B) bar.o(C,D)]
A 라는 라이브러리에 B,C,D 함수가 있고 이중 B 함수만 사용된다고 가정했을 때,
B 함수가 foo.c 파일에 포함되어 있다면, 링커가 bar.o를 제거할 수 도 있습니다.
실제로 그런지는 시험해 봐야 알것 같아요.
[참고]
Preventing objects from being linked if they are not needed?
http://stackoverflow.com/questions/2502922/preventing-objects-from-being-linked-if-they-are-not-needed
——
———
Life is a tragedy when seen in close-up, but a comedy in long-shot. - Chaplin, Charlie -
댓글 달기