, 나는 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 바이트가됩니다.
감사합니다. 0 바이트 출력은 그냥 질문입니다. 진입 점을 다시 정의하면 작동합니다. –
하지만 x86 gcc에서 또 다른 문제가 발견되었습니다. -Os 옵션을 사용하면 생성 된 바이너리가 비정상적으로 실행됩니다. -O 옵션을 추가하지 않으면 출력 바이너리 크기는 더 커지지 만 정상적으로 실행됩니다. 그런 문제를 만났습니까? 나는 시간이있을 때 이것을 디버깅 할 것이다. –
나는 그런 종류의 문제를 만났습니다. 항상 같은 원인이 아니기 때문에 여기서는 당신을 도울 수는 없지만, 종종 C의 정의되지 않은 동작과 관련이 있습니다 (C에서 정의되지 않은 동작이 너무 많습니다). 최적화 수준에 따라 변경 될 수 있습니다. – Jacen