Портирование проекта ядра с DJGPP на MinGW

Попытка скомпилировать проект ядра C++ с MinGW & NASM (ранее DJGPP & NASM). На самом деле тоже пробовал Cygwin, с такими же результатами ниже:

  • Во-первых, просто поменялся \DJGPP\bin за \MinGW\bin, Получил следующую ошибку ссылки: target coff-go32 not found.
  • Поменял цель на elf32-i386и получил cannot perform PE operations on non PE output file 'build/kernel.elf' Это было немного странной ошибкой, поскольку, насколько мне известно, я не делаю никаких "операций PE".
  • Снова изменил цель, чтобы pe-i386получил новую ошибку build/Common.o:Common.cc:(.text+0x2a): undefined reference to 'atexit'

Кажется, MinGW генерирует atexit призывает к статическим классам. DJGPP не сделал. Ядро выполняет свою собственную обработку DTOR во время выключения. Я знаю, что определение atexit "решит" это, но это будет скорее хакером, а не долгосрочным решением. Я скорее хочу, чтобы MinGW компилировал существующий код без каких-либо (или минимальных) модификаций.

Честно говоря, я не очень знаком со средой сборки Windows и могу использовать любые советы о том, что делать. Проект (за исключением изменений, перечисленных выше) прекрасно компилируется и загружается под DJGPP. Кажется, разница в том, как DJGGP и MinGW обрабатывают объявления классов во время компиляции?

РЕДАКТИРОВАТЬ: наконец сломался и построил кросс-компилятор на Cygwin. Все работает сейчас.

1 ответ

Решение

Вам необходимо создать автономный кросс-компилятор. На эту проблему много раз ссылались в OSDev Wiki до такой степени, что большинство людей рекомендуют начать писать ядро, сначала создав кросс-компилятор.

Эта статья предоставит пошаговую ссылку на создание собственного кросс-компилятора. Обратите внимание, что в Windows вам, возможно, придется создать кросс-компилятор, используя MingW или Cygwin.

Другие вопросы по тегам