Я наткнулся на этот вопрос только из-за недавнего вопроса о стеке , который вы спросили о каком-то коде, который не работал должным образом в 32-битном Windows 10 внутри сеанса виртуальной DOS NTVDM.
Проблема в том, что вы неправильно собрали кросс-компилятор DJGPP и все необходимые компоненты. Вы не показываете нам, какие команды вы используете для процесса сборки, какие версии зависимостей использовались и откуда они взялись.
Первое, что вам нужно сделать, это создать кросс-компилятор DJGPP. Есть люди, которые поддерживают сценарии именно для этого. В частности, я успешно использовал одну среду / сценарий сборки, полученную от пользователя Andrew Wu на Github . Очень просто использовать. Похоже, что вы используете среду типа Unix на основе результатов, которые вы нам показали. Поскольку вам удалось собрать DJGPP (хотя он и не работает), я предполагаю, что у вас уже установлены все необходимые инструменты сборки. Сначала загрузите сценарии с помощью:
git clone https://github.com/andrewwutw/build-djgpp
Перейдите в каталог проекта с помощью:
cd build-djgpp
Просмотрите файл README.md
! Он сообщает вам, какие версии поддерживаются сценарием, требования к сборке для вашего типа ОС et c. В настоящее время они поддерживают версии до 10.1.0. Если у вас есть все необходимое, выберите версию для сборки (я буду использовать 9.3.0, поскольку это версия, которую вы используете), а затем запустите сборку. Вам нужно будет собрать как root или использовать sudo
при установке в каталог /usr/local/djgpp
./build-djgpp.sh 9.3.0
Это займет некоторое время, но по завершении он должен быть установлен и готов к использованию. Соглашение об именах немного отличается от префикса команд с помощью djgpp-
. Этот скрипт создает вещи с более полным целевым префиксом i586-pc-msdosdjgpp-
Чтобы добавить его в свой путь и настроить другие переменные среды, используйте:
. /usr/local/djgpp/setenv
Если вы используете sh, это должно быть будет выполняться каждый раз, когда вы входите в систему, добавляйте эту строку в сценарий входа в оболочку. Для BASH, который находится в файле ~/.bashrc
Создайте файл с именем hello.c
, содержащий:
#include<stdio.h>
int main()
{
printf("Hello, world!\n");
}
Скомпилируйте его в файл с именем hello.exe
:
i586-pc-msdosdjgpp-gcc -O3 -Wall -Wextra hello.c -o hello.exe
Предполагая, что у вас установлен хост DPMI (например, CWSDPMI.EXE
), hello.exe
должен работать в MS-DOS, FreeDOS, DOSBox, сеансе Windows NTVDM и т.д. c. При запуске должно отображаться:
Привет, мир!
Если у вас нет sh для сборки с нуля, у Andrew Wu есть несколько готовых пакетов для ряда последних выпусков DJGPP. Платформы, для которых они доступны: MacOS, Linux 32, Linux 64, MinGW и автономная версия MinGW, для работы которой не требуется среда MinGW.