Mpd 최소 컴파일 방법

안녕하셔요!

이번에 MPD를 컴파일 해 보려고 합니다.
기본 설정으로 컴파일 해보니 패키지에서 제공하는 실행파일보다 3배 정도 크게 생성이 되는군요.
configure에 옵션을 아무리 주어봐도 1MB이하로 파일크기가 줄지를 않습니다.

혹시 파일 사이즈를 줄이면서 최적화를 하려면 어떻게 하면 되는지 여쭙고자 합니다.
요구하는 기능은 출력은 ALSA, OSS에 디코더는 WAVE, FLAC 그리고 TCP, CUE Sheet 정도면 됩니다.

간단히 말씀드려, 최소 설정으로 기존 패키지보다 작게 만드는 방법을 문의드립니다.
혹시 제가 따라하기가 어렵다면, 염치없는 말씀이지만 혹시 도와 주실 분 없나요?
configure 옵션은 제가 드리겠습니다.

gcc옵션에 -march=native -O2를 주시면 최적화가 됩니다. native 옵션은 CPU를 GCC가 자동 감지하는 건데 대부분 맞는 답을 알려줍니다.
그리고 바이너리 3배나 차이나는 것을 보니 strip을 안하신 듯합니다.

[quote="geepurin":jvxhpv2f]gcc옵션에 -march=native -O2를 주시면 최적화가 됩니다. native 옵션은 CPU를 GCC가 자동 감지하는 건데 대부분 맞는 답을 알려줍니다.
그리고 바이너리 3배나 차이나는 것을 보니 strip을 안하신 듯합니다.[/quote:jvxhpv2f]
답변 감사합니다.
방금 알려주신 옵션만으로도 파일 크기가 엄청 줄어드는 군요.
configure 옵션으로 기존 파일보다 10% 줄이는 데에는 성공했습니다.
사무실 노트북으로는 소리가 잘 나오구요, 집에 가서 오디오시스템에서 컴파일 해 보아야 겠습니다.

내친 김에, MPD 컴파일에서 strip을 어떻게 적용할 수 있는지 상세한 설명 좀 부탁드립니다. 제가 너무 몰라서요…
파일크기를 더 줄일 수 있을 것 같습니다.

P.S. 허걱! 이거 혹시 "strip mpd"로 별다른 옵션없이 그냥 쓰면 되는 건가요? 파일 크기가 엄청 더 줄어드는데요.
예전에 도스 시절에 exepack 생각이 나네요.

구분 / 파일크기 / 점유메모리 (ps aux VSZ/RSS)
MPD원본 / 406,728 / 52,688/7,972
1차 옵션 / 365,092 / 30,160/2,088 -> 파일크기는 두번째지만 메모리크기는 최소로 낙점!
2차 옵션(strip) / 286,388 / 43,152/4,020 -> 파일크기는 제일 작지만 메모리크기는 두번째.

이미 다 찾아보셨겠지만,
-O2는 안정성을 보장하는 속도 최적화 옵션입니다. -O3가 있기는 한데 안정적이지 못하죠. -O0는 전혀 최적화하지 않으며 컴파일만 빨리됩니다.
그리고 -Os가 있는데 이것은 사이즈 최적화입니다. 작은 바이너리가 더 빠른 상황도 있는 법이죠.(커널컴파일은 디폴트 옵션이 사이즈 최적화입니다)
결국 컴파일 할때 -O2나 -Os를 쓰게되더군요.

strip은 바이너리에서 불필요한 것을 없애줍니다. 저도 자세하게는 모르지만, 젠투리눅스에서 ‘strip --strip-unneeded 바이너리명’ 을 마지막에 실행하더군요. 그래서 저도 이렇게 씁니다. ;)

PS. -march 옵션은 최적화 할 아키텍쳐를 정하는 것인데, native(auto detection)로 컴파일한 바이너리는 다른 곳에서 실행이 실패할 가능성이 높습니다. 예를들어 amd에서 컴파일하면 intel 계열에서 실패할 확률이 높은데 3dnow 같은 feature가 amd만 있기 때문이죠.
바이너리의 이동이 필요하면 -march=i686 정도만 주는 게 좋습니다. ;)

상세한 설명 감사합니다.

덕분에,

3차 옵션(strip --strip-unneeded) / 286,388 / 29,136/2,088 -> 파일크기 및 메모리크기 최소로 최종 낙점!

여담이지만… 대부분의 리눅스 배포판에 있는 실행 바이너리를

file 명령으로 확인해 보시면 마지막에 stripped 라고 표기될 것 입니다.

바이너리는 배포전에 strip 해주시는게 좋습니다.

(대신 디버깅 심볼이 날아가게 되겠지만)