Попытка скомпилировать проект ядра 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. Все работают сейчас.