Снова про cygwin

Я уже неоднократно писал, что мне казалось, что я нашел “змеиное масло”, то есть универсальный способ коимпиляции GNU/Linux исходников для Винды – это cygwin. Это оказалось вовсе не так и в использовании cygwin есть куча тонкостей.

1. Компилятор cygwin делает Windows executable files, но чтобы они запустились не внутри cygwin, а в шелле Виндовс или скажем в FAR, им нужны всякие dll, например cygwin1.dll

2. Но при этом в процессе отладки надо помнить, если в каталоге с exe будет лежать dll, то из Винды это запустится, а из cygwin уже нет. Для отладочных экспериментов надо удалять dll из текущего каталога.

3. Если программа работает с файлами, надо помнить, что пути внутри cygwin указываются в UNIX-формате, например bin/circle, а для запуска из среды Windows надо перекомпилировать, меняя косую черту на обратную косую. С учетом экранирования путь будет выглядеть так
“bin\\circle.exe”

Но и на этом пути у меня бывали проблемы. Лучше (проще) вызывать исполнимый файл из текущего каталога и лучше использовать не системный вызов system(), а нечто типа execl (execv).

О локалке Граней Мира

Вначале краткий отчет о моих попытках сделать виндовые бинарники (“локалки”) Дримленда и Граней мира: не получилось.

Я консультировался с Руффиной и другими программистами этих миров, они ничем помочь мне не смогли. Большинство мад-серверов базируется на серверах с ОС Linux, чаще всего Ubuntu, и разработка идет под них, под их компиляторы, библиотеки, особенности сетевой архитектуры. Совместимость типа “этот код компилируется везде” бывает очень редко. А в случае Дрима и Граней у их команды есть свой метод, они берут обычный мад и оборачивают вокруг него обертку из своего кода со скриптовым языком Fenia. И вот эта обертка, написанная на С++ очень чувствительна к версии компилятора и у меня на Винде в cygwin не собирается или собирается с проблемами, не позволяющими маду запускаться. Кстати, метод Дрима чем-то похож на то, как из обычного (ванильного) сервера Майнкрафт делается сервер Forge или Fabric, только в случае Майнкрафта обертка делается не на уровне исходника, а на уровне бинарного кода, потому что Майн – закрытое проприетарное программное обеспечение. И если вернуться к мадам, еще существует встраивание в мад-сервер скриптового языка lua, тоже вроде по похожей схеме, как и в Дриме. Лично я как смиренный программист восьмидесятых скриптовые языки не люблю и у меня мад-сервера монолитные, и многие возможности я вношу на уровне кода ядра, то есть они hardcoded. Мне так проще, но с точки зрения правильного подхода к архитектуре это не совсем правильно.

И снова о cygwin

Иногда при сборке в среде cygwin выдается сообщение (сегодня я на него наткнулся в Win 7 32 bit при сборке клиента tintin++)

‘conftest.exe’: Permission denied.

Или rm: can’t stat conftest.exe или что-то похожее

Чаще всего это бывает при запуске скрипта configure

Я погуглил, этот глюк бывает в Windows из-за того, что выключена служба Windows Application Experience service (в русской Винде – Информация о совместимости приложений). Ее надо включить для чего надо запустить services.msc, найти ее там и включить. Мне помогло.

kbtin

Случайно нашел новый мад-клиент, форк тинтина

https://github.com/kilobyte/kbtin

Он немного отличается оформлением интерфейса и языком скриптов.
Под последней Ubuntu собирается легко и сразу.

Я кстати поучаствовал в его развитии, вначале не смог собрать, написал автору issue, он откорректировал документацию (там был не упомянут один из необходимых пакетов).

UPDATE 17-May-2021. В cygwin тоже собирается сразу.

UPDATE 18-May-2021. В Андроиде собирается с небольшой очевидной модификацией автоконфигурационного скрипта:

https://github.com/prool/kbtin

UPDATE 2-Mar-2023 Мои сборки этого клиента для Windows:
http://files.mud.kharkov.org/KBtin/

Бег по граблям

Я люблю бегать по граблям, в частности, натыкаясь на какую-нибудь ошибку, порой исправляю ее и забываю, как именно я ее исправил и спустя несколько месяцев (или лет) опять натыкаюсь на нее и опять начинаю думать, как же ее исправлять.

Так вот, для памяти запишу: код Виртустан-мада и Старого Зеркала плохо собирается на 64-битных системах, например в cygwin, флаг -m32 и соответствующие библиотеки помогают не всегда. В частности, под cygwin/64 он либо не собирается либо собирается и сразу падает в корку. Ну и чорт с ним, потому как все нормально собирается на 32-разрядном Цигвине, а 32-разрядные exe нормально работают в 64-разрядной Винде.

А на 64-разрядной Ubuntu 18.04.3 мой Виртустан собрался и нормально работает. И Старое Зеркало. (А Былины, как и Ноыое Зеркало изначально заточены именно под Ubuntu x86_64)

Сборки мадов для Виндовс

Я сделал свежие сборки мадов для 64-разрядной Виндовс. Компилировал я в среде cygwin, это оказалось достаточно просто, все делается примерно как в Линуксе (то есть cmake с нужными параметрами, потом make, подробнее см. документацию в репозитории кода Былин).

Во-первых, сделал тестовую “локалку” с тремя зонами (движок для проверки зон) Былин (версия кода от 6 ноября 2019 года). Вот она. (Примерно то же самое, но немного более старое лежит на официальном сайте Былин).

А во-вторых, я сделал локалку Нового Зеркала (со всеми зонами). Вот.

Зачем можно использовать локалки: на них можно играть (это полноценный сервер), можно соло, можно с друзьями по сети. А можно использовать их для билдерства: тестировать зоны, изучать OLC и триггеры и т.п.

И снова Былины

Решил я собрать свежие Былины под Windows/cygwin. К сожалению собрать Былины по их инструкции мне не удалось. Там есть тонкость с питоном, пока мне неподдающаяся.

Зато собрал Былины без питона, это просто (питон в новых Былинах нужен только для иммовской питонной консоли)

http://prool.kharkov.org/mud/byliny-windows/exe/0/

Как собрать мад без питона? Удаляешь из Makefile упоминания файлов scripting.*

И из нескольких исходников (а частности comm.cpp) удаляешь вызовы методов, расположенных в этом файле (методы scripting:: и console::). Остальное по инструкции

Пруль