Портирование проекта ядра с DJGPP на MinGW - PullRequest
2 голосов
/ 18 октября 2011

Попытка скомпилировать проект ядра 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 Ответ

3 голосов
/ 18 октября 2011

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

...