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