Tag: cygwin
Пряма і зворотня сумісність
Бінарні файли, скомпільовані у середовищі cygwin/Windows 7, працюють у Windows 11. Але не навпаки: то, що скомпільовано у Windows 11, не працює на попередній, сьомій, версії Віндовс
Цікаві досліди стосовно Віндовс 11
На ювілей я подарував жінці новий ноутбук. На ноутбуці встановлена нова для мене операційна система – 11-та Вінда (так, я слоупок). Я так і сказав “це я тобі дарую, але я теж буду інколи на ньому працювати”. Так ось, мої бінарні збіркі, які компілював у середовищі Віндовс 7/cygwin запускаються і працюють у одинадцятці. Поки що встиг перевірити тіки свою компіляцію клієнта tintin++.
Снова про 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).
Release 2.02.30 TinTin++
https://github.com/scandum/tintin/releases/tag/2.02.30
Мои результаты компиляции этой версии будут описаны в коментах
О локалке Граней Мира
Вначале краткий отчет о моих попытках сделать виндовые бинарники (“локалки”) Дримленда и Граней мира: не получилось.
Я консультировался с Руффиной и другими программистами этих миров, они ничем помочь мне не смогли. Большинство мад-серверов базируется на серверах с ОС 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, найти ее там и включить. Мне помогло.
Вышла очередная версия консольного мад-клиента tintin++ 2.02.12
https://github.com/scandum/tintin
На всех платформах, к которым я имею доступ (Ubuntu 20.04.1, macOS Catalina, Android 6, Windows/cygwin) собирается сразу
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)