Я начал писать свое собственное ядро и разрабатываю Windows 10.
Я использую следующие инструменты:
- g cc 8.1.0 elf x86_64 для компиляции моего C кода и для ссылок.
- nasm 2.14.02 для компиляции моего кода сборки.
Я использую следующую команду для сборки моего автономного кода ядра:
gcc -c -m64 common/src/kernel.c -o common/build/kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra`
Я использую следующую команду для компиляции root кода сборки:
nasm -f elf64 targets/x86_64/src/main.asm -o targets/x86_64/build/main.o
Наконец, я связываю объектные файлы вместе:
gcc -o dist/x86_64/main.bin -ffreestanding -O2 targets/x86_64/build/main.o common/build/kernel.o -lgcc
Понятия не имею почему, но следующая ошибка останавливает работу процесса связывания:
... undefined reference to `WinMain'
collect2.exe: error: ld returned 1 exit status
Это не имеет смысла для меня, потому что моя компиляция и компоновка находятся в автономном режиме, и я не пытаюсь использовать какие-либо windows API.
Как мне это исправить?
Если это имеет значение, вот мой очень простой код:
main.asm
:
EXTERN kernel_main
call kernel_main
jmp $
; padding and magic number
times 510-($-$$) db 0
dw 0xaa55
kernel.c
:
void kernel_main()
{
// empty
}
Edit : похоже, мне может понадобиться x86_64-elf-gcc
компилятор
Edit 2 : я попробовал x86_64-w64-mingw32-gcc
компилятор, такая же ошибка возникает