2008-11-02 2 views
3

Я работаю над написанием ядра, и у меня есть несколько друзей, работающих со мной в проекте. Мы используем DJGPP для компиляции проекта на некоторое время, но у нас есть проблемы с кросс-платформенной совместимостью с компиляцией таким образом, которые оставили мой основной Partnet в проекте, который не удалось скомпилировать в Windows XP. (У GGGGGGG есть проблемы с списками аргументов длиннее 127 на Windows XP, но у них нет проблем с теми же списками аргументов в Vista. Так что на этот раз Vista работает лучше, чем XP в чем-то. OO)C (++) Compiler Transition - Сделайте DJGPP прочь пожалуйста

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

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

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

Спасибо!

ответ

1

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

Готов поспорить, вы проходите -f coff.

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

+0

При передаче -f Win32 (как и раньше) я по-прежнему получаю следующую ошибку от GCC MinGW: «сборка/запуск.o: файл не распознан: формат файла не распознан « – 2008-11-02 21:31:07

0

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

Быстрый поиск Google нашел tutorial on compiling x264 under MinGW, где один из шагов - собрать NASM на MinGW.

В противном случае вы можете попробовать (как предложено на комментарии к другому ответу) с помощью objcopy.

1

Построить кросс-компилятор.

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

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

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