일부 파일을 연결하려고합니다. 내 명령은 다음과 같습니다.
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
인수를 포함했습니다. 잘못된 위치에 넣었습니까? 이 플래그에 대한 구문을 찾을 수 없습니다. 감사합니다.
댓글
답변
boot.o
에 -fPIC
와 호환되지 않는 .multiboot
elf 섹션이 있습니다. div>. -fPIC
로 boot.o
컴파일을 시도 할 수 있지만 실패해야합니다.
https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#OS-image-format (헤더)
반면에
. “동적 로더”가 있어도 부팅 프로세스 중에 “동적 로더”가있을 수 없습니다.
댓글
- 헤더와 플래그 값에 대한 정보 만 찾을 수 있었고 내 boot.s와 일치했습니다. BTW boot.o는 컴파일 할 수없는 객체 파일이며 boot.s 여야합니다.
- .bin을 -fPIC로 컴파일 / 링크하여 무엇을 얻으려고하십니까?
-fPIC
옵션은 컴파일 단계 (개체 파일을 생성하는 명령) 중에 적용되어야합니다. 링크 단계가 아니라 보여 주듯이gcc -fPIC -c kernel.c -o kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra