2번은 아마 다른 고수님들께서 설명 잘해주실것 같고요.
1번은 실행형 압축프로그램으로 어느정도 커버할수 있습니다.
윈도용으로는..
ASPACK이라는게 흔히 자주 쓰이고요 (물론 실행형 압축프로그램 종류는 무궁무진합니다 그중에 그나마 흔한 것)
오픈소스로는 UPX라는게 유명합니다. (이게 리눅스도 지원하는지는 모르겠습니다.)
실행 모듈들을 넣고 압축하듯 패킹하는 방식입니다. 물론 압축후에도 당연히 파일 형식이 변하지 않습니다.
다만 이미 압축된 데이터를 담고있거나
내부적으로 구성된 모듈들중에 리소스 데이터가 거의 없고 대부분 실행코드 뿐이라면 거의 압축이 안될수도 있습니다.
--
This is for you new people. I have just one rule :
Everyone fights, no one quits. If you don't do your job, I'll shoot you myself. Do you get me?
링크 과정에서 crt 라이브러리가 static으로 링크되고 있는지 확인해보세요. 그렇다면 dynamic으로 링크하도록 해주시고 디버그 정보가 포함이 되어있는지 확인해보세요. 만약에 컴파일러 옵션과 링커 옵션에 디버그 정보가 포함되도록 되어 있으면 빼주세요.
실행파일 용량에는 크게 이렇게 구분됩니다.
1. 데이터(소스에 코딩된 스트링, 상수, 리소스 등)
2. 코드(실제 기계어가 담긴 코드영역)
3. 임포트 테이블(dynamic 라이브러리를 쓸 경우)
4. 익스포트 테이블(대부분 dynamic 라이브러리에서 보이며 exe에서는 잘 안씁니다.)
5. 디버그 데이터(컴파일러 또는 링커 옵션에 디버그 정보를 생성하고 포함하도록 해놨을 경우)
6. 기타..
대략 이런것들이 뭉쳐서 실행파일을 만듭니다.
여기서 없어도 되는 것들은 5번이며 없어도 실행에는 문제가 없습니다.
그리고 2번에서 라이브러리를 static으로 링크 하는 경우(특히 crt) 크기가 엄청 늘어날 수 있습니다.
가능하면 dynamic으로 링크 해주시면 되며 대신 dynamic 라이브러리이므로 실행시 해당 라이브러리가
반드시 존재해야합니다.
그리고 마지막으로 컴파일 최적화 옵션을 속도우선 보다는 크기우선 으로 해주세요.
오히려 속도우선보다 크기우선이 더 빠른 경우도 있습니다.(페이지 폴트 때문에)
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
실행파일 압축..
2번은 아마 다른 고수님들께서 설명 잘해주실것 같고요.
1번은 실행형 압축프로그램으로 어느정도 커버할수 있습니다.
윈도용으로는..
ASPACK이라는게 흔히 자주 쓰이고요 (물론 실행형 압축프로그램 종류는 무궁무진합니다 그중에 그나마 흔한 것)
오픈소스로는 UPX라는게 유명합니다. (이게 리눅스도 지원하는지는 모르겠습니다.)
실행 모듈들을 넣고 압축하듯 패킹하는 방식입니다. 물론 압축후에도 당연히 파일 형식이 변하지 않습니다.
다만 이미 압축된 데이터를 담고있거나
내부적으로 구성된 모듈들중에 리소스 데이터가 거의 없고 대부분 실행코드 뿐이라면 거의 압축이 안될수도 있습니다.
--
This is for you new people. I have just one rule :
Everyone fights, no one quits. If you don't do your job, I'll shoot you myself. Do you get me?
--
UPX
UPX 리눅스도 지원합니다.
링크 과정에서 crt
링크 과정에서 crt 라이브러리가 static으로 링크되고 있는지 확인해보세요. 그렇다면 dynamic으로 링크하도록 해주시고 디버그 정보가 포함이 되어있는지 확인해보세요. 만약에 컴파일러 옵션과 링커 옵션에 디버그 정보가 포함되도록 되어 있으면 빼주세요.
실행파일 용량에는 크게 이렇게 구분됩니다.
1. 데이터(소스에 코딩된 스트링, 상수, 리소스 등)
2. 코드(실제 기계어가 담긴 코드영역)
3. 임포트 테이블(dynamic 라이브러리를 쓸 경우)
4. 익스포트 테이블(대부분 dynamic 라이브러리에서 보이며 exe에서는 잘 안씁니다.)
5. 디버그 데이터(컴파일러 또는 링커 옵션에 디버그 정보를 생성하고 포함하도록 해놨을 경우)
6. 기타..
대략 이런것들이 뭉쳐서 실행파일을 만듭니다.
여기서 없어도 되는 것들은 5번이며 없어도 실행에는 문제가 없습니다.
그리고 2번에서 라이브러리를 static으로 링크 하는 경우(특히 crt) 크기가 엄청 늘어날 수 있습니다.
가능하면 dynamic으로 링크 해주시면 되며 대신 dynamic 라이브러리이므로 실행시 해당 라이브러리가
반드시 존재해야합니다.
그리고 마지막으로 컴파일 최적화 옵션을 속도우선 보다는 크기우선 으로 해주세요.
오히려 속도우선보다 크기우선이 더 빠른 경우도 있습니다.(페이지 폴트 때문에)
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
좋은정보 감사합니다
1메가 안으로 줄이려고 하는데 여러 방법을 이용해바야겟습니다
만만한 strip 명령
그외 사용되지 않는 코드를 제거하려면 링크 참조
http://kldp.org/node/94079
댓글 달기