일부 파일을 연결하려고합니다. 내 명령은 다음과 같습니다.

gcc -T linker.ld -o Stack\ Berry.bin -ffreestanding -O2 -nostlib kernel.o boot.o -fPIC -lgcc 

하지만이 오류가 발생합니다.

/usr/bin/ld: boot.o: relocation R_X86_64_32 against `.multiboot" can not be used when making a PIE object; recompile with -fPIC /usr/bin/ld: final link failed: Nonrepresentable section on output 

-fPIC 인수를 포함했습니다. 잘못된 위치에 넣었습니까? 이 플래그에 대한 구문을 찾을 수 없습니다. 감사합니다.

댓글

  • -fPIC 옵션은 컴파일 단계 (개체 파일을 생성하는 명령) 중에 적용되어야합니다. 링크 단계가 아니라 보여 주듯이
  • 그렇지 않습니다. ' 작동하지 않는 것 같습니다. GAS 코드 (arg 아님)를 컴파일하고 개체 파일을 생성하는 명령을 시도했습니다. 작동하지 않는 것 같습니다. gcc -fPIC -c kernel.c -o kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra
  • (1) 내 첫 번째 추측 (그리고 그것은 단지 추측 임)이 명령 줄 순서 문제라는 것입니다. 명령의 순서를 변경해 보셨습니까? (2) 실제로 “recompile with -fPIC”오류를 읽으면 내 첫 추측을 의심하고 @steeldriver가 올바른 아이디어를 가지고 있다고 믿게됩니다.… (계속)
  • (계속)… (3) 사람들은이 질문이 여기에서 주제를 벗어 났고 Stack Overflow 에 속한다고 말할 것입니다. 저는 이것이 주제에 관한 것이라고 생각합니다. Stack Overflow 에서 더 빠르고 정확하게 답변을받을 수 있다는 데 동의합니다. 여기에서 답변을 얻지 못하고 질문이 이전되지 않는 경우 문제를 신고하고 이전을 요청하는 것이 좋습니다. 질문 만 다시 게시하지 마세요.
  • 예, 순서를 변경해 보았습니다.

답변

boot.o-fPIC와 호환되지 않는 .multiboot elf 섹션이 있습니다. div>. -fPICboot.o 컴파일을 시도 할 수 있지만 실패해야합니다.

https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#OS-image-format (헤더)

반면에

. “동적 로더”가 있어도 부팅 프로세스 중에 “동적 로더”가있을 수 없습니다.

댓글

  • 헤더와 플래그 값에 대한 정보 만 찾을 수 있었고 내 boot.s와 일치했습니다. BTW boot.o는 컴파일 할 수없는 객체 파일이며 boot.s 여야합니다.
  • .bin을 -fPIC로 컴파일 / 링크하여 무엇을 얻으려고하십니까?

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다