void used_func() { ... } void unused_func() { ... } void client_func() { used_func(); }
위와 같은 코드를 컴파일해서 나오는 .o 파일엔 세 함수가 있을 텐데요,
clent_func 를 시작점으로 해서, 이 함수가 완전히 수행하는데 필요한
함수만을 남기고 나머지 모두(unused_func 같은)를 오브젝트에서 빼버리는 방법이 있나요?
전에도 누군가 질문한적이 있어서 검색해봤는데.. 못찾았습니다만..
이 경우, 왕도가 없습니다. 비슷하게 linker의 --gc-sections 라는 옵션이 있지만, 이것은 section을 제거하는 것이지 함수나 변수를 제거하는 것은 아닙니다.
경험상 AIX 같은 경우는 링커가 그런일을 해줍니다. RCS Tag를 모두 제거하는 특성이 있어서 아주 괴롭죠..
위와같은 문제때문에, glibc 같이 방대한 라이브러리에서는 함수하나를 하나의 파일에 두는 방법으로 오브젝트를 잘게 쪼개고 archive 형태로 만듭니다.
즉, 하나의 라이브러리를 만들때 call chain을 잘 분석하여 되도록 작은 크기의 여러 파일로 만들면 원하는 기능이 구현될 것입니다.
---http://coolengineer.com
http://gcc.gnu.org/ml/gcc-help/2003-08/msg00128.html
에 리눅스에서 쓸 수 있는 방법이 있더군요.
문제는 -r 옵션과 함께 쓸 수가 없다는...
좀 더 찾아봐야겠네요. (제가 개발하는 플랫폼이 리눅스가 아니고, -r 옵션이 꼭 필요한 곳이라...)
즐겁게 살아 볼까나~*
전에 제가 올렸던 질문에 답변(?)이 있습니다. 그러나.. 방법이 없더군요.. 저도 무척 아쉬웠습니다. 참고하세요.
http://bbs.kldp.org/viewtopic.php?t=24074&highlight=
함수별로 파일을 따로 만드세요. func1.o func2.o ... 모 이런식으로 관리하시는게 어떨까요? 라이브러리 함수들은 이런식으로 함수별로 오브젝트를 따로 생성하더군요.
텍스트 포맷에 대한 자세한 정보
<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]
전에도 누군가 질문한적이 있어서 검색해봤는데.. 못찾았습니다만..
전에도 누군가 질문한적이 있어서 검색해봤는데.. 못찾았습니다만..
이 경우, 왕도가 없습니다. 비슷하게 linker의 --gc-sections 라는 옵션이 있지만, 이것은 section을 제거하는 것이지 함수나 변수를 제거하는 것은 아닙니다.
경험상 AIX 같은 경우는 링커가 그런일을 해줍니다. RCS Tag를 모두 제거하는 특성이 있어서 아주 괴롭죠..
위와같은 문제때문에, glibc 같이 방대한 라이브러리에서는 함수하나를 하나의 파일에 두는 방법으로 오브젝트를 잘게 쪼개고 archive 형태로 만듭니다.
즉, 하나의 라이브러리를 만들때 call chain을 잘 분석하여 되도록 작은 크기의 여러 파일로 만들면 원하는 기능이 구현될 것입니다.
---
http://coolengineer.com
자답
http://gcc.gnu.org/ml/gcc-help/2003-08/msg00128.html
에 리눅스에서 쓸 수 있는 방법이 있더군요.
문제는 -r 옵션과 함께 쓸 수가 없다는...
좀 더 찾아봐야겠네요. (제가 개발하는 플랫폼이 리눅스가 아니고, -r 옵션이 꼭 필요한 곳이라...)
즐겁게 살아 볼까나~*
전에 제가 올린 질문에...
전에 제가 올렸던 질문에 답변(?)이 있습니다.
그러나.. 방법이 없더군요.. 저도 무척 아쉬웠습니다.
참고하세요.
http://bbs.kldp.org/viewtopic.php?t=24074&highlight=
함수별로 파일을 따로 만드세요.func1.o func2.o ... 모
함수별로 파일을 따로 만드세요.
func1.o func2.o ... 모 이런식으로 관리하시는게 어떨까요?
라이브러리 함수들은 이런식으로 함수별로 오브젝트를 따로 생성하더군요.
댓글 달기