Это, возможно, глупый вопрос, но мне просто интересно, возможно ли следующее: если я просто забуду об этом и пойду по пути виртуальной машины/полноценной ОС GNU-Linux, это нормально.
После того, как я повозился с исходным кодом fortune и fortune-mod (доступным на ibiblio) и не добился успеха в попытках заменить специфичный для Linux код на специфичный для Windows код (возможно, из-за полного нубизма в отношении C), я все равно задаю этот вопрос.
Есть ли у кого-нибудь версия командной строки/консольного окна программы BSD fortune/ fortune-mod, которая будет компилироваться (и, желательно, запускаться) либо на машине DOS, либо в консоли/окне командной строки Windows (без cygwin, если возможно)? Возможно ли скомпилировать fortune на машине GNU/Linux, используя заголовочные файлы GNU-Linux, но нацелить ее на машину DOS/Windows, или это наивный вопрос?
[ПРАВКА] Мне лучше спросить об этом на stackoverflow?
решение1
Изучив исходный код fortune.c из fortune-mod, можно сделать вывод, что для его компиляции нативно в Windows потребуются значительные усилия по портированию. Cygwin, вероятно, ваш лучший выбор; все, что вам нужно сделать, это отправить библиотеки DLL времени выполнения Cygwin вместе со встроенным EXE, и вам не придется запускать его в терминале Cygwin, если вы этого не хотите. Cygwin должен предоставить 99% уровня взаимодействия POSIX, необходимого для его компиляции. Если это не удастся, есть переписанный Fortune на Python, который будет легко работать на любой платформе.
Вы можете попробовать и перенести его самостоятельно, но он не будет компилироваться с 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:
решение2
https://www.bgreco.net/fortuneпредоставляет Fortune в Powershell. Время идет.