неопределенная ссылка на `WinMain` при компиляции моего собственного ядра - PullRequest
0 голосов
/ 23 марта 2020

Я начал писать свое собственное ядро ​​и разрабатываю 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 компилятор, такая же ошибка возникает

1 Ответ

0 голосов
/ 23 марта 2020

Я пропустил флаг -nostdlib на компоновщике. Кажется, это решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...