2012-02-24 4 views
1

출력 파일에 사용되지 않는 모듈을 생략하도록 gcc/ld에 알릴 수 있는지 알고 싶습니다.gcc/ld에게 사용되지 않는 모듈을 제외하도록 말할 수 있습니까?

모듈이 a.c, b.cc.c 인 것으로 가정합니다. a.c과 은 서로 의존하며 그 중 하나에는 main()이 포함되며 이유가 무엇이든간에 c.c의 부분은 참조되지 않습니다. 나는 도서관에 함께 물건을 묶을 경우

gcc -c a.c 
gcc -c b.c 
gcc -c c.c 

, c.c로부터 코드를 출력 할 수 없습니다되지 않습니다

ar rcs abc.a a.o b.o c.o 
gcc abc.a 

하지만 GCC에 직접 .o 파일을 제공하는 경우 코드에서 c.c resp. c.o이 포함되어 있습니다.

gcc a.o b.o c.o 

gcc에 라이브러리에 넣지 않고 gcc가 사용하지 않는 모듈을 생략하도록 할 수 있습니까?

AVR μC를 프로그래밍하고 라이브러리 생성을 허용하지 않지만 빌드 구성에 따라 사용되지 않는 소스 파일을 생략하고자하는 AVR Studio를 사용합니다.

+1

GCC에 c.o를 추가하도록 명시 적으로 요청하면 놀랄 필요가 없습니다. – ydroneaud

+0

그건 제가 아니예요. AVR Studio가 그것을 묻습니다 :-) – glglgl

답변

3

AVR에서 가능한지 모르겠지만 컴파일시에 -ffunction-sections -fdata-sections을 사용하여 각 섹션을 자체 섹션에 배치하도록 GCC에 요청할 수 있습니다. 그런 다음 링크 단계에서 -Wl,--gc-sections을 사용하여 ld에 사용되지 않는 섹션을 제거하도록 요청할 수 있습니다.

+0

훌륭한 사운드입니다. 나는이 "gc-sections"을 가능하게하는 스위치를 발견했다. '-function-sections -fata-sections'없이 모듈 단위로 작동합니까? 나는 ISR 루틴을 튕겨 내고 싶지 않다 ... – glglgl

+0

@glglgl은 이름에 따라 모듈 당 섹션이 아니라 모듈 당 하나씩있다. 따라서 ISR이 나머지 코드에서 참조되지 않으면 링커가 ISR을 삭제합니다. – ydroneaud

+0

오, 나는 모든 모듈이 그때 버려지는 몇 가지 자체 섹션을 가지고 있다고 생각했습니다 ... 몇 가지 테스트를 마친 후 실제로 이것이 사실 인 것으로 나타났습니다. – glglgl