Переход с компилятора на C (++) - уберите DJGPP, пожалуйста - PullRequest
3 голосов
/ 02 ноября 2008

Я работаю над написанием ядра, и у меня есть несколько друзей, работающих со мной над проектом. Некоторое время мы использовали DJGPP для компиляции проекта, но у нас возникли некоторые проблемы с кросс-платформенной совместимостью при компиляции, из-за которых мой основной Партнет в проекте не мог компилироваться в Windows XP. (У GCC DJGPP есть проблемы со списками аргументов длиннее 127 в Windows XP, но у него нет проблем с теми же списками аргументов в Vista. Так, на этот раз Vista работает лучше, чем XP в чем-то. O.O)

В любом случае, вместо того, чтобы пытаться сделать какой-то грязный хак, чтобы сделать чертову штуку компилируемой с DJGPP, мы решили, что хотим полностью отказаться от DJGPP и работать с другой версией GCC для Windows. Проблема в том, что MinGW (насколько мне известно) не позволяет нам использовать синтаксис NASM для сборочных частей кода, и было бы немного трудно преобразовать все это в синтаксис AT & T на данном этапе. Возможно, конечно, так как это довольно рано в проекте, но боль.

Итак, теперь вы знаете проблему. У меня такой вопрос: какой дистрибутив компилятора GCC для Windows позволит нам легче всего перенести этот проект на себя? В идеале мы ищем что-то, что могло бы выполнять синтаксис ассемблера NASM, не зависеть от внешних библиотек (это ядро ​​здесь, у него не будет к ним доступа) и работать согласованно на нескольких версиях Windows. Каковы ваши рекомендации о том, как лучше всего это сделать, и какую версию GCC для Windows вы рекомендуете?

Обратите внимание, что если нам понадобится преобразовать проект в синтаксис AT & T, это нормально, я просто хотел бы этого не делать. На самом деле мы используем NASM для сборки его сборочных битов, и это создает действительный файл .o, но MinGW не может связать это по какой-то причине. Я думаю, что встроенные биты сборки (возможно, 5 строк) уже являются синтаксисом AT & T, как того требует GCC.

Спасибо!

Ответы [ 3 ]

1 голос
/ 19 октября 2011

Сборка кросс-компилятора.

http://wiki.osdev.org/GCC_Cross-Compiler

Это то, что я сделал, когда переходил с DJGPP для разработки на хосте Windows. Я рекомендую метод Cygwin, так как он немного более стабилен, чем MSYS.

Как только вы это сделаете, настройте NASM для создания elf32 объектных файлов, и все готово.

1 голос
/ 02 ноября 2008

Возможно, вы передаете неправильный тип объекта в nasm с опцией -f.

Могу поспорить, что вы проходите -f coff.

Вам нужно будет передать -f win32.

0 голосов
/ 03 ноября 2008

Вы используете NASM, скомпилированный для DOS или для Windows? Я не смотрел, но возможно, что есть разница. Кроме того, если ваш NASM слишком старый, возможно, он не сможет сгенерировать то, что может понять MinGW.

Быстрый поиск в Google нашел учебник по компиляции x264 под MinGW , где одним из шагов является компиляция NASM на MinGW.

Если этого не сделать, вы можете попробовать (как предложено в комментарии к другому ответу) использовать objcopy.

...