-g 와 -O2 그리고 strip 에 관해서

iamslash의 이미지

다음은 제가 작성한 main.cpp 입니다.

int main()
{
    return 0;
}

위의 것을 각각 다음과 같이 컴파일및 실행 했습니다.

1. gcc -g -O2 -Wall main.cpp -o a.out
2. strip a.out
3. gcc -O2 -Wall main.cpp -o b.out
4. strip b.out

이렇게 했더니 네가지 다 결과물이 다르군요...
-g 없이 컴파일 해서 strip 했을 경우도 줄어듭니다.
그렇다면 -g 없을때도 디버깅 심볼이 첨가가 되는 겁니까?

디버깅 심벌없이 릴리즈된 형태의 바이너리를 만들려면 어떻게 해야 하는지요...

elecguy의 이미지

-g0 옵션을 추가해 보세요.

폐인, 노가다 그 끝은..?

iamslash의 이미지

g0 하고 strip 해도 줄어드는 데요...

hys545의 이미지

iamslash wrote:
다음은 제가 작성한 main.cpp 입니다.
int main()
{
    return 0;
}

위의 것을 각각 다음과 같이 컴파일및 실행 했습니다.

1. gcc -g -O2 -Wall main.cpp -o a.out
2. strip a.out
3. gcc -O2 -Wall main.cpp -o b.out
4. strip b.out

이렇게 했더니 네가지 다 결과물이 다르군요...
-g 없이 컴파일 해서 strip 했을 경우도 줄어듭니다.
그렇다면 -g 없을때도 디버깅 심볼이 첨가가 되는 겁니까?

디버깅 심벌없이 릴리즈된 형태의 바이너리를 만들려면 어떻게 해야 하는지요...

7.1 디버깅 심볼에 대하여
모든 프로그램이나 바이너리는 기본적으로 디버깅 심볼을 포함하여 컴파일된다. 이는 여러분이 프로그램이나 라이브러리를 디버거를 통해 실행할 수 있으며 디버거의 출력물이 좀 더 사용자에게 편하게 된다는 것을 뜻한다. 이 디버깅 심볼들은 또한 프로그램이나 라이브러리의 크기를 매우 크게 한다. 이 문서는 디버깅 심볼 없이 소프트웨어를 설치하진 않는다 (많은 독자들이 디버깅 소프트웨어를 사용하는지 않하는지를 내가 알지 못하기 때문에). 대신에 여러분은 원할경우 strip 프로그램으로 그 심볼들을 직접 제거할 수 있다.

바이너리 (a.out 이나 ELF 바이너리여야 한다) 로부터 디버깅 심볼을 제거하기 위해선 strip --strip-debug filename 을 실행한다. 여러 파일들에서 디버깅 심볼을 제거하고 싶다면 와일드 카드 문자를 쓰면 된다 (strip --strip-debug $LFS/usr/bin/* 와 같이).

여러분이 디버깅 심볼이 큰 차이를 만드는지 알고 싶다면 아래에 통계가 있다:

디버깅 심볼을 포함하여 정적으로 링크된 Bash 바이너리: 2.3MB
디버깅 심볼 없이 정적으로 링크된 Bash 바이너리: 645KB
디버깅 심볼을 포함하여 동적으로 링크된 Bash 바이너리: 1.2MB
디버깅 심볼 없이 동적으로 링크된 Bash 바이너리: 478KB
디버깅 심볼을 포함한 $LFS/usr/lib (glibc 와 gcc 파일들): 87MB
디버깅 심볼이 없는 $LFS/usr/lib (glibc 와 gcc 파일들): 16MB
사용하는 컴파일러와 동적으로 프로그램을 링크시키기 위해 쓰이는 C 라이브러리의 버전에 따라 크기가 다를 수 있으나 디버깅 심볼을 포함한 것과 그렇지 않은 것을 비교한다면 여러분의 결과는 비슷할 것이다. 이 장을 끝내고 모든 LFS 바이너리들과 라이브러리들에서 디버깅 심볼을 제거한 후 나는 102MB 를 약간 넘은 디스크 공간을 다시 얻었다. 매우 차이가 크다. 그 차이는 모든 것을 설치하게 되는 이 문서의 마지막에 같은 일을 했을 때 더욱 커질 것이다.

원래 기본이 디버깅 정보 포함입니다.

즐린

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.