Из изучения исходного кода fortune.c из fortune-mod, кажется, что потребуются значительные усилия по переносу, чтобы сделать эту компиляцию встроенной в Windows. Cygwin, вероятно, ваш лучший выбор; все, что вам нужно сделать, это отправить библиотеки времени выполнения Cygwin вместе со встроенным EXE-файлом, и вам не придется запускать его внутри терминала Cygwin, если вы этого не хотите. Cygwin должен предоставить 99% уровня взаимодействия POSIX, необходимого для его компиляции. Если это не удастся, то в Python будет переписан Fortune, который с готовностью будет работать на любой платформе.
Вы можете попробовать портировать его самостоятельно, но он не будет компилироваться с Visual Studio или MinGW, если вы не избавитесь от таких вещей, как #include <sys/*.h>
и fcntl.h
из исходного кода. Это специфичные для POSIX вещи, которые Windows не поддерживает изначально. Смотрите здесь - файловые дескрипторы и сокеты обрабатываются в Windows совершенно иначе, чем в BSD/UNIX/Linux.
Cygwin, с другой стороны, предназначен для поддержки именно такого типа вещей, и он переводит его под капот в эквивалентные вызовы Win32. При компиляции в Cygwin вы можете столкнуться с некоторыми ошибками во время компиляции, но серьезность и сложность этих ошибок будут очень незначительными по сравнению с трудностями, возникающими при переносе его для компиляции в Visual Studio или MinGW.
Кроме того, среда оболочки cmd.exe
для Microsoft Windows (по крайней мере, в Windows NT и более поздних версиях) никак не связана с DOS. Я не знаю , почему вы хотите , чтобы запустить что - нибудь на DOS , если это не было абсолютно необходимо, и в этом случае, запуск DOS будет делать вещи сложнее, не проще.
Обновить:
Вот инструкции по компиляции на Cygwin:
- Установить Cygwin
- Установите
libpcreposix0
, gcc-core
, make
и libpcre-devel
- Распакуйте файл fortune-mod-9708.tar.gz в папку
- Редактируйте
Makefile
с вашим любимым текстовым редактором
- Измените строку 49 следующим образом:
REGEXDEFS=-DHAVE_REGEX_H -DPOSIX_REGEX
- Измените строку 55 следующим образом:
REGEXLIBS=-lpcreposix
- Запустите
make
в папке fortune-mod-9708
- Подождите
Теперь у вас должен быть скомпилированный двоичный файл fortune.exe
. Должны существовать следующие двоичные файлы:
./fortune/fortune.exe
./util/rot.exe
./util/strfile.exe
./util/unstr.exe
Теперь вы можете запустить make install
и он поместит все в подкаталоги /usr/local
. Или вы можете настроить Makefile для установки в любом месте.
Если вы хотите скопировать этот инструмент в другое место, поместите файлы /bin/cyg*.dll
в /usr/local/games
, затем возьмите всю папку /usr/local
, заархивируйте ее (или скопируйте куда-нибудь) и запустите games/fortune.exe по желанию. Вам могут понадобиться дополнительные библиотеки DLL из каталога bin Cygwin; если вы получаете ошибки при запуске, вот почему. Поместите их в тот же каталог, что и fortune.exe
чтобы он заработал.
Мой ответ на ваше упоминание о DOS: