Есть ли способ использовать и с MinGW?

#c #cygwin #mingw32

#c #cygwin #mingw32

Вопрос:

Я просматривал вебсайт IOCCC и наткнулся на запись 1998 года с именем banks, которая представляет собой симулятор полета Карла Бэнкса. Я хотел попробовать и поэтому загрузил файлы, но, как вы, возможно, знаете (из MinGW), к сожалению, я нахожусь в системе Windows (в частности, 32-разрядной версии Win-7), и когда я попытался использовать Cygwin и MinGW для компиляции файла, он показал

 banks.c:3:16: fatal error: X11/Xlib.h: No such file or directory
3 | #include       <X11/Xlib.h>
  |                ^~~~~~~~~~~~
compilation terminated.
make: *** [makefile:92: banks] Error 1
  

и включенным кодом banks.c

 #include                     <math.h>
#include                   <sys/time.h>
#include                   <X11/Xlib.h>
#include                  <X11/keysym.h>
  

Есть ли способ скомпилировать файл без использования Linux?

Комментарии:

1. Может быть, я смогу сэкономить вам немного времени: из любопытства я попытался создать banks.c в системе Linux, и это не удалось. Среди прочего, есть целая куча неопределенных переменных. Я подозреваю, что получение его для сборки в Windows является лишь частью проблемы.

2. @KevinBoone Но единственной ошибкой, с которой я столкнулся, была вышеупомянутая (при использовании makefile ), а также никакого предупреждения.

3. Препроцессор C (или C ) завершается сбоем в строке #include, и фактическая компиляция вообще не запускается. Это причина, по которой вы не видите все ошибки сразу.

4. Учитывая, что это была выигрышная запись в IOCCC, она не должна потерпеть неудачу. Но если мы используем рассуждения в ответе @ViktorLatypov, я понял, почему это произошло. Но я все равно попытаюсь найти, как скомпилировать библиотеки X11 в Windows

5. Убедитесь, что вы установили libx11-devel с помощью приложения установки cygwin. Этот пакет предоставляет файлы x11 /Xlib.h и x11/keysym.h, среди прочего, необходимые для создания клиента X11. Скомпилируйте для cygwin с помощью gcc. Это позволит создать клиент банка x11. Также установите xorg-сервер, который предоставляет двоичные файлы для сервера X11. И прочитайте документы по cygwin.com о запуске xserver.

Ответ №1:

Когда я писал это еще в 1997 году, я определенно тестировал его в Windows с помощью Cygwin, поэтому я знаю, что тогда это работало, и не должно быть никаких причин, по которым это не сработает сейчас. В диспетчере пакетов Cygwin вам нужно будет установить пакет с именем libx11-dev или что-то в этом роде (библиотеки разработки X11), а также X-сервер (вероятно, называемый чем-то вроде Xorg) и, конечно, GCC и инструменты разработки, такие как make . Вы должны иметь возможность запускать сервер Cygwin X из меню «Пуск», а в последующем окне терминала внутри окна X вы можете перейти к папке, в которую вы распаковали победителей IOCCC, и запустить make . (Более подробная информация о Cygwin выходит за рамки этого ответа; я использую в основном память, поскольку я не использовал Cygwin годами.)

Но если вы хотите знать мое мнение, не беспокойтесь о Cygwin . Гораздо более простым способом сборки и запуска было бы просто получить Live CD для Linux, загрузить Linux напрямую и запустить его там. На некоторых концертных компакт-дисках есть инструменты разработки, такие как GCC, другие позволяют достаточно легко загружать GCC. Knoppix — обычный выбор.

(Если вы хотите быть действительно странным, вы можете попробовать установить Windows Subsystem для Linux, чтобы вы могли запускать программы Linux изначально в Windows.)

Ответ №2:

Существует Win32-порт X Window server, называемый Xming, он довольно часто используется для подключения к удаленным хостам Unix.

Если вы используете MinGW с MSys2, вызывается пакет mingw-w64-libxcb , поэтому возможна компиляция и использование программ на основе X11.

Что касается самой программы (banks.c), лучше (хотя и не так просто) скомпилировать ее для WinAPI напрямую (да, я знаю, это звучит сложнее, чем просто запустить make, но программа довольно старая и, вероятно, использует нестандартные и устаревшие расширения и особенности компиляторов 1998 года, поэтому лучше отлаживать / исправлять это в знакомой среде, в вашем случае это Windows). Исходный код (после де-запутывания) выглядит как графическая программа, сосредоточенная вокруг

 for ( ; XPending (e) ; )
  

, который напрямую преобразуется в WinAPI

 while (GetMessage(amp;msg, NULL, 0, 0))
{
    TranslateMessage(amp;msg);
    DispatchMessage(amp;msg);
    ... all the code here
}
  

Создание окна и обратные вызовы клавиш также переводятся в WinAPI.

ПРАВКА1


Программа работает в X11 в Linux «из коробки», но также требует, чтобы некоторые данные передавались из stdin (это не должно быть проблемой в Windows, но если у вас не установлен «cat», это также потребуется).

Комментарии:

1. Не могли бы вы рассказать, как загрузить mingw-w64-libxcb . И когда я открываю каталог msys в mingw, он показывает 1.0, это версия 1?

2. Я бы предположил, что команда для «загрузки» — это «pacman -S <package-name>»

3. Хорошо, то есть вы хотите сказать, что мне нужно переписать всю программу, чтобы скомпилировать ее (потому что это может быть сложно для меня, учитывая мои знания в этой области) или только приведенный выше код?

4. Нет, вам не нужно все переписывать. Поскольку использование Xlib не настолько обширно, вы можете потратить 15 минут на установку какого-нибудь простого Linux на виртуальной машине и компиляцию образца с самым старым возможным C, который вы можете там найти.

Ответ №3:

X11 — это оконная система для операционных систем на базе Unix, поэтому ее нельзя использовать в Windows изначально.

Но есть способ как запускать программы X11, так и компилировать их с помощью компилятора Cygwin. Для этой цели вам придется использовать Cygwin/X, который должен содержать библиотеки X11 .

Комментарии:

1. Я установил Cygwin/X через Cygwin, но не могли бы вы пояснить, как использовать его для запуска X11?

2. Смотрите Документацию по cygwin.com для начала.