Перенос проекта ядра с 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 обрабатывают объявления классов во время компиляции?

EDIT: Наконец сломался и собрал кросс-компилятор на Cygwin. Все работает сейчас.


person Unsigned    schedule 18.10.2011    source источник
comment
В Вики OSDev может быть полезная информация (это бесценный ресурс для x86 osdev imo). Для получения более конкретных советов вы должны указать точные шаги сборки (командная строка/Makefile и любой соответствующий код).   -  person user786653    schedule 18.10.2011


Ответы (1)


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

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

person Earlz    schedule 18.10.2011
comment
Среда сборки Windows сумасшедшая! :) Это решение, с которым я столкнулся. +1 за хорошие ссылки. - person Unsigned; 19.10.2011