쓰이지 않는 함수를 오브젝트에서 빼는 방법?

freezm7의 이미지

void used_func()
{
    ...
}

void unused_func()
{
    ...
}

void client_func()
{
    used_func();
}

위와 같은 코드를 컴파일해서 나오는 .o 파일엔 세 함수가 있을 텐데요,

clent_func 를 시작점으로 해서, 이 함수가 완전히 수행하는데 필요한

함수만을 남기고 나머지 모두(unused_func 같은)를 오브젝트에서 빼버리는 방법이 있나요?

pynoos의 이미지

전에도 누군가 질문한적이 있어서 검색해봤는데.. 못찾았습니다만..

이 경우, 왕도가 없습니다. 비슷하게 linker의 --gc-sections 라는 옵션이 있지만, 이것은 section을 제거하는 것이지 함수나 변수를 제거하는 것은 아닙니다.

경험상 AIX 같은 경우는 링커가 그런일을 해줍니다. RCS Tag를 모두 제거하는 특성이 있어서 아주 괴롭죠..

위와같은 문제때문에, glibc 같이 방대한 라이브러리에서는 함수하나를 하나의 파일에 두는 방법으로 오브젝트를 잘게 쪼개고 archive 형태로 만듭니다.

즉, 하나의 라이브러리를 만들때 call chain을 잘 분석하여 되도록 작은 크기의 여러 파일로 만들면 원하는 기능이 구현될 것입니다.

freezm7의 이미지

http://gcc.gnu.org/ml/gcc-help/2003-08/msg00128.html

에 리눅스에서 쓸 수 있는 방법이 있더군요.

문제는 -r 옵션과 함께 쓸 수가 없다는...

좀 더 찾아봐야겠네요. (제가 개발하는 플랫폼이 리눅스가 아니고, -r 옵션이 꼭 필요한 곳이라...)

즐겁게 살아 볼까나~*

neohwang의 이미지

전에 제가 올렸던 질문에 답변(?)이 있습니다.
그러나.. 방법이 없더군요.. 저도 무척 아쉬웠습니다.
참고하세요.

http://bbs.kldp.org/viewtopic.php?t=24074&highlight=

yeppiguy의 이미지

함수별로 파일을 따로 만드세요.
func1.o func2.o ... 모 이런식으로 관리하시는게 어떨까요?
라이브러리 함수들은 이런식으로 함수별로 오브젝트를 따로 생성하더군요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.