Портирование проекта ядра с 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.