i686-elf-g cc выдает 64-битный файл вместо 32-битного? - PullRequest
0 голосов
/ 23 марта 2020

Я следовал учебному пособию по osdev и сделал для него собственный Makefile, но когда я запустил make kernel для компиляции системы в .bin-файл, я столкнулся с ошибкой при компоновке.

Выход компоновщика: src/kernel.o: file not recognized: file format not recognized

Команда компоновщика: $HOME/opt/cross/bin/i686-elf-gcc -T linker.ld -o kernel.bin -ffreestanding -O2 -nostdlib boot.o kernel.o -lgcc

Я быстро его изучил и обнаружил, что i686- кросс-компилятор elf-g cc создал 64-битный файл. Weird. Я попытался скомпилировать ядро. c с теми же флагами, и он работал просто отлично. В чем может быть проблема?

CPARAMS : -std=gnu99 -ffreestanding -O2 -Wall -Wextra

MAKEFILE : $(GCC) $(CPARAMS) -c $@ -o $<

Итак, фактическая команда выглядит так: $HOME/opt/cross/bin/i686-elf-gcc -std=gnu99 -ffreestanding -O2 -Wall -Wextra -c kernel.c -o kernel.o

  • Файл, созданный при запуске компилятора с помощью make: kernel.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

  • Файл, созданный при запуске компилятора из оболочки: kernel.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped

...