Переход к компилятору C(++) – уберите DJGPP, пожалуйста

StackOverflow https://stackoverflow.com/questions/257329

Вопрос

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

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

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

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

Спасибо!

Это было полезно?

Решение

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

Держу пари, что ты передаешь -f coff.

Вам нужно будет передать -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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top