#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 для начала.