-g 와 -O2 그리고 strip 에 관해서
글쓴이: iamslash / 작성시간: 수, 2003/10/01 - 4:58오후
다음은 제가 작성한 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 없을때도 디버깅 심볼이 첨가가 되는 겁니까?
디버깅 심벌없이 릴리즈된 형태의 바이너리를 만들려면 어떻게 해야 하는지요...
Forums:
-g0 ..
-g0 옵션을 추가해 보세요.
폐인, 노가다 그 끝은..?

g0 하고 strip 해도 줄어드는 데요...
g0 하고 strip 해도 줄어드는 데요...
Re: -g 와 -O2 그리고 strip 에 관해서
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 를 약간 넘은 디스크 공간을 다시 얻었다. 매우 차이가 크다. 그 차이는 모든 것을 설치하게 되는 이 문서의 마지막에 같은 일을 했을 때 더욱 커질 것이다.
원래 기본이 디버깅 정보 포함입니다.
즐린
댓글 달기