3

Вероятно, это глупый вопрос, но мне было просто интересно, выполнимо ли следующее: Если я должен просто забыть об этом и пойти по пути VM/ full GNU-Linux OS, это нормально.

После осмотра исходного кода для Fortune и Fortune-Mod (доступного от ibiblio) и безуспешных попыток заменить специфичный для Linux код специфичным для Windows кодом (возможно, из-за серьезного недоброжелательности, когда дело доходит до C), я все равно спрашиваю.

Есть ли у кого-нибудь версия командной строки / консоли для программы BSD fortune / fortune-mod, которая будет компилироваться (и предпочтительно запускаться) либо на компьютере с DOS, либо в окне консоли / командной строки Windows (по возможности, без cygwin)? ? Можно ли скомпилировать удачу на машине с GNU / Linux, используя заголовочные файлы GNU-Linux, но нацелить ее на машину с DOS / Windows или это наивный вопрос?

[EDIT] Должен ли я спросить об этом на stackoverflow?

1 ответ1

2

Из изучения исходного кода 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:

  1. Установить Cygwin
  2. Установите libpcreposix0 , gcc-core , make и libpcre-devel
  3. Распакуйте файл fortune-mod-9708.tar.gz в папку
  4. Редактируйте Makefile с вашим любимым текстовым редактором
  5. Измените строку 49 следующим образом: REGEXDEFS=-DHAVE_REGEX_H -DPOSIX_REGEX
  6. Измените строку 55 следующим образом: REGEXLIBS=-lpcreposix
  7. Запустите make в папке fortune-mod-9708
  8. Подождите
  9. Теперь у вас должен быть скомпилированный двоичный файл 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:

нет

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .