2014-07-05 3 views
1

, 나는 OS가없는 응용 프로그램 바이너리를 구축하려면 다음을 사용-fdata 섹션 및 --gc 섹션 옵션 내 ARM 프로젝트에서

arm-linux-gcc -Os -ffunction-sections -fdata-sections -o boot.o boot.S 
arm-linux-gcc -Os -ffunction-sections -fdata-sections -o main.o main.c 
arm-linux-ld -T link.lds --gc-sections -o target.bin boot.o main.o 

이 작품을 잘. 왜냐하면 "-function-sections", "-fdata-sections"및 "--gc-sections"옵션을 제거하면 target.bin 파일 크기가 거의 두 배로 증가하기 때문입니다.

x86 플랫폼에서는 방법을 발견했다 : 그 gcc 및 ld 옵션을 사용하지 않으면 출력이 정상이지만 팔 플랫폼으로 이러한 옵션을 사용하면 출력 파일은 0 바이트가됩니다.

답변

2

-Os -ffunction-sections -fdata-sections--gc-sections은 x86 시스템에서 작동해야합니다. 프로그램과 링커 스크립트가 x86에 적합한 지 확신합니까? 귀하의 프로그램은 베어 메탈 ARM을위한 것이므로 x86 OS에 대한 엔트리 포인트가 없을 것이며 진입 점이 없으면 모든 항목이 --gc-sections 옵션으로 garbaged됩니다.

현재 "질문"은 실제로 질문을 동봉하지 않습니다.

+0

감사합니다. 0 바이트 출력은 그냥 질문입니다. 진입 점을 다시 정의하면 작동합니다. –

+0

하지만 x86 gcc에서 또 다른 문제가 발견되었습니다. -Os 옵션을 사용하면 생성 된 바이너리가 비정상적으로 실행됩니다. -O 옵션을 추가하지 않으면 출력 바이너리 크기는 더 커지지 만 정상적으로 실행됩니다. 그런 문제를 만났습니까? 나는 시간이있을 때 이것을 디버깅 할 것이다. –

+0

나는 그런 종류의 문제를 만났습니다. 항상 같은 원인이 아니기 때문에 여기서는 당신을 도울 수는 없지만, 종종 C의 정의되지 않은 동작과 관련이 있습니다 (C에서 정의되지 않은 동작이 너무 많습니다). 최적화 수준에 따라 변경 될 수 있습니다. – Jacen