2013-08-12 2 views
2

매우 큰 오브젝트 파일을 생성하는 데 문제가 있습니다. 우리는 VxWorks 5.5.1을 사용하고 있지만 GCC 4.1.2를 사용할 수 있습니다.VxWorks 5.5.1 용으로 컴파일 할 때 오브젝트 파일 크기를 줄이는 방법은 무엇입니까?

우리 모듈의 크기는 대략 6.2MB이며이를 줄이기위한 방법을 모색 중입니다. 이 문제는 주로 템플릿을 과도하게 사용하여 발생합니다. nm을 사용하여 파일에 심볼을 덤프 할 때 텍스트 파일은 1.8MB입니다. 이것은 파일의 거의 1/3이 이름 일 뿐이라는 것을 나에게 알립니다. 파일 크기를 줄이는 방법이 있습니까?

다음 방법

이 일을하지 않은 :

  • --strip-all 아무런 영향이없는 것으로 보인다 - 출력이 동일
  • 내가 --gc-sections를 사용할 수 없습니다 --strip-debug를 사용하여, 그것은 그 플랫폼 지원되지 않기 때문에합니다 (옵션은 간단히 무시 됨)

VxWorks는로드시 코드를 링크하지만 링크해야하는 것은 모두 C++ 런타임 라이브러리이므로 어떤 기호도 추가되지 않도록합니다. 전역 심볼 테이블에, 그래서 그 정보를 제거하는 방법이 있어야합니다, 맞죠?

i386-wrs-vxworks-ld.exe --version 
>>> GNU ld (Wind River VxWorks G++ DWARF-EH 4.1-131) 2.17.50.20070509 
>>> SPR fixes: cq103489 cq111170 cq116027 cq116652 cq118878 cq125145 

내 컴파일러 버전 :

는 참고로, 여기 내 링커 버전입니다

i386-wrs-vxworks-g++.exe --version 
>>> i386-wrs-vxworks-g++.exe (GCC) 4.1.2 
+0

'-Os' 최적화 플래그를 사용 하시겠습니까? –

+0

죄송합니다. 이미이 작업을 수행했음을 언급 했어야합니다. 출력 크기를 8.5MB에서 6.2MB로 줄였습니다. –

답변

4

난 당신이 객체에서 기호를 제거하고 싶은 무엇을 의미하는 참조하십시오. 그러나 모든 기호를 제거하려면 응용 프로그램을 시작하기위한 시작점으로 사용할 기호가 없습니다. 하지만 당신에게는 여전히 선택권이 있다고 생각합니다. 불행히도 VxWorks 5는별로 효과가없는 C++ 컴파일러로 알려져 있습니다.

응용 프로그램을 * .a (아카이브 - 별명 정적 라이브러리)로 컴파일 한 경우 빌드시이 파일을 운영 체제에 링크하여 usrAppInit.c에서 호출 할 수 있습니다. 이렇게하면 심볼을 스트라이핑 할 수 있습니다. 또는 적어도 다운로드 된 심볼 테이블로 이동시킬 수 있습니다. 응용 프로그램 빌드 속성에서 매크로 탭을 선택하고 LIBS 매크로에 보관 파일을 추가하십시오.

아카이브를 만들려면 빌드 속성으로 이동하여 규칙 탭을 선택한 다음 드롭 다운 상자에서 아카이브를 선택하십시오.

응용 프로그램이 연결된 상태에서 OS의 크기를 조정하려면 vxworks 설정을 수정하십시오. 최대한 많은 구성 요소를 비활성화하십시오. 또한 다운로드 된 심볼 테이블 (개발 도구 구성 요소 -> 심볼 테이블 구성 요소 -> 심볼 테이블 초기화 구성 요소 -> 심볼 테이블 초기화 선택 -> 다운로드 된 심볼 테이블)을 사용해야합니다. 이렇게하면 OS에서 모든 심볼을 제거하고 디버깅 할 수 있도록 부팅 후 다운로드 할 수있는 다운로드 가능한 심볼 테이블을 만듭니다.

행운을 빈다.

추신. 컴파일러에서 디버그 (-g)를 해제했는지 확인하십시오. 컴파일러 스위치를 게시하면 더 많은 도움을 줄 수 있습니다.

0

우리가 일반적으로 처리 한 방식은 이미지를 압축하는 것입니다. 또한 실행 전에 RAM으로 압축을 풀 수 있도록 부트롬을 빌드해야합니다. 나는 당신이 이것을 할 수있게 해주는 표준 메이크 파일 옵션이 있다고 믿는다.