Переход с компилятора на C(++) - уберите DJGPP, пожалуйста
Я работаю над написанием ядра, и у меня есть несколько друзей, работающих со мной над проектом. Некоторое время мы использовали DJGPP для компиляции проекта, но у нас возникли некоторые проблемы с кросс-платформенной совместимостью при компиляции, из-за которых мой основной Партнет в проекте не мог компилироваться в Windows XP. (У GCC DJGPP есть проблемы со списками аргументов длиннее 127 в Windows XP, но у него нет проблем с теми же списками аргументов в Vista. Итак, на этот раз Vista работает лучше, чем XP в чем-то.OO)
В любом случае, вместо того, чтобы пытаться сделать какой-то грязный хак, чтобы сделать чертову штуку компилируемой с DJGPP, мы решили, что хотим полностью отказаться от DJGPP и работать с другой версией GCC для Windows. Проблема в том, что MinGW (насколько мне известно) не позволяет нам использовать синтаксис NASM для сборочных частей кода, и было бы немного трудно преобразовать все это в синтаксис AT&T на данном этапе. Возможно, конечно, так как это довольно рано в проекте, но это боль.
Итак, теперь вы знаете проблему. У меня такой вопрос: какой дистрибутив компилятора GCC для Windows позволит нам легче всего перенести этот проект на себя? В идеале мы ищем что-то, что могло бы выполнять синтаксис ассемблера NASM, не зависеть от внешних библиотек (это ядро здесь, к нему не будет доступа) и работать согласованно на нескольких версиях в Windows. Каковы ваши рекомендации о том, как лучше всего это сделать, и какую версию GCC для Windows вы рекомендуете?
Обратите внимание, что если нам понадобится преобразовать проект в синтаксис AT&T, это нормально, я бы просто не хотел этого делать. На самом деле мы используем NASM для сборки его сборочных битов, и это создает действительный файл. o, но MinGW не может связать это по какой-то причине. Я думаю, что встроенные биты сборки (возможно, 5 строк) уже являются синтаксисом AT&T, как того требует GCC.
Спасибо!
3 ответа
Возможно, вы передаете неправильный тип объекта в nasm с опцией -f.
Могу поспорить, ты проходишь мимо
Вам нужно будет передать -f win32.
Сборка кросс-компилятора.
http://wiki.osdev.org/GCC_Cross-Compiler
Это то, что я сделал при переходе с DJGPP для разработки на хосте Windows. Я рекомендую метод Cygwin, так как он немного более стабилен, чем MSYS.
После этого настройте NASM для сборки. elf32
объектные файлы, и все готово.
Вы используете NASM, скомпилированный для DOS или для Windows? Я не смотрел, но возможно, что есть разница. Кроме того, если ваш NASM слишком старый, он не сможет сгенерировать то, что может понять MinGW.
Быстрый поиск в Google нашел руководство по компиляции x264 под MinGW, где одним из шагов является компиляция NASM на MinGW.
В противном случае вы можете попробовать (как предложено в комментарии к другому ответу) использовать objcopy.