Совместимость бинарника со всеми Linux
Модератор: Модераторы
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
В windows нет такого бардака. Там, если функция была в Win95, то она и в Win11 будет на том же месте. В Linux библиотеки .so имеют версии, и имена функций в них тоже могут иметь версии. Поэтому добиться, чтобы вызывалось именно то, что предполагается вызвать, несколько сложнее.
- Alexx2000
- постоялец
- Сообщения: 490
- Зарегистрирован: 25.10.2006 00:22:07
- Откуда: Мытищи
- Контактная информация:
Да, в Linux с этим беда. В итоге приходится писать такие штуки:
Код: Выделить всё
const
webplib = 'libwebp.so.%d';
var
libwebp: TLibHandle;
procedure Initialize;
var
Version: Integer;
LibraryName: AnsiString;
begin
for Version:= 7 downto 5 do
begin
LibraryName:= Format(webplib, [Version]);
libwebp:= LoadLibrary(LibraryName);
if (libwebp <> NilHandle) then Break;
end;
Допустим, я купил программу. Потом купил новый комп. Поставил Linux поновее. И моя программа фсе? А если прекратилась поддержка, допустим, компания разорилась, то тоже кирдык? Как интересно... Вроде, люди боролись за свободу софта, а получилось как всегда.
давно сделано. И в при новом обновлении Linux будет указатель на обновлённую библиотеку.stikriz11 писал(а):В Linux не слышали про позднее связывание? Ну, по имени найти метод и уже тога вызвать? В чем конкретно проблема so? Почему в windows dll можно вызвать от предыдущей версии, а Linux нет?
В большинстве случаев, всё будет нормально работать. И лишь в единичных случаях происходят сбои. И, если рапортуют об ошибке, то есть большая вероятность, что её исправят.
Я практически не видел на своём Linux проблем с запуском программ, кроме тех случаев, когда библиотеки совсем сырые, там можно хорошо ловить баги. Не ставьте сырые дистрибутивы и будет вам счастие.
stikriz11, панику только наводишь. Паникёр.
Добавлено спустя 2 минуты 17 секунд:
когда речь идёт о таких вещах, то это ни как не относится ко всем приложениям, которые используют сторонние библиотеки. Как я и писал, в большинстве случаев всё нормально работает, если вы используете сторонние библиотеки.grot писал(а):Речь идет о статически-собранном бинарнике, у которого нет зависимистей на посторонние библиотеки !
Это не паника, это слезный плач. Предлагает поплакать вместе.Seenkao писал(а):stikriz11, панику только наводишь. Паникёр.
Проект, от которого создатели отвернулись и прекратили поддержку, умирает. На любых ОСях так было, есть и будет. Разве что некий stikriz11, поняв глубину проблемы, наконец-то все исправит.stikriz11 писал(а):если прекратилась поддержка ... то тоже кирдык?
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Из личной практики - важно учитывать разрядность
а в рамках одной разрядности обычно проблем нет
у меня для теста
AltLinux/Fedora/Cent/Debian/Ubuntu
Мои бинарники работаю корректно без перекомпиляции...
а в рамках одной разрядности обычно проблем нет
у меня для теста
AltLinux/Fedora/Cent/Debian/Ubuntu
Мои бинарники работаю корректно без перекомпиляции...
ну кстати насчет совместимости ) поставил недавно для тестов kylix 3 на 9 мандрейк, собрал на нем простенькую прогу, и попытался запустить на убунте 22.10. Конечно сразу не пошла, после танцев с бубнов для установки поддержки всех либ под 386 запустилась. Правда смотрелась ужасно из-за отсутствия сглаживания шрифтов. но запустилась.
основная проблема в линуксе, на чем может поломаться совместимость, это GUI либы. gtk2 gtk3 gtk4 gtk5 gtk6 gtk7 .... qt5 qt6 qt7 qt8 qt9 и так далее. чтобы запустилась программа надо чтобы стояли именной нужной версии библиотеки. в винде с этим проще. там вызовы GUI с винды 95 практически не менялся и простые проги собранные на 95 будут работать и в 11 винде.
основная проблема в линуксе, на чем может поломаться совместимость, это GUI либы. gtk2 gtk3 gtk4 gtk5 gtk6 gtk7 .... qt5 qt6 qt7 qt8 qt9 и так далее. чтобы запустилась программа надо чтобы стояли именной нужной версии библиотеки. в винде с этим проще. там вызовы GUI с винды 95 практически не менялся и простые проги собранные на 95 будут работать и в 11 винде.
Весь мой пост с вопросами. Я ничего не утверждал, а спрашивал. Но, красноглазику надо показать насколько он умнее всех. Я не понимаю, почему линуксоиды ощущают себя членом какой-то секты праведников? У них никогда нет проблем и все всегда хорошо. Как в анекдоте про 90 летнего старика, который три раза за день занимается сексом с женой. Надо видеть недостатки, чтобы из исправлять. Если не понимать что хорошо, а что плохо, не будет никакого развития.Это не паника, это слезный плач. Предлагает поплакать вместе.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Просто не верно приходить в новую ОС с практиками из другой. Особенно если это была windows. Там слишком много можно совершать глупостей.
Посмотрите какие возможности предоставляют менеджеры пакетов, что есть в стандарных репозитариях. Не надо тащить свои версии библиотек, подменяя штатные.
Правильно собранный инсталяционный пакет решит большую часть ваших проблем.
Посмотрите какие возможности предоставляют менеджеры пакетов, что есть в стандарных репозитариях. Не надо тащить свои версии библиотек, подменяя штатные.
Правильно собранный инсталяционный пакет решит большую часть ваших проблем.
Зачастую нет, не будет, если разработчик не позаботился об обратной совместимости. Старый софт в новых версиях Windows с большой долей вероятности запустится, а новый в старых нет.grot писал(а):Хочу как в Windows , где :
32-bit EXE будет запускаться везьде , начиная с Windows-95 и заканчивая теми версиями, котрые еще даже не вышли.
Точно. Но и в обратную сторону работает точно так же. Посади линуксоида на Windows и у него точно так же возникнут проблемы как и пользователя Windows под Linux. И та, и другая ОС требует определенных знаний.stikriz11 писал(а): У них никогда нет проблем и все всегда хорошо.
Никакого развития не будет если не учиться и развиваться. самому. А то получается по принципу - раз я не вдупляю как это работает, значит это сделано плохо.stikriz11 писал(а):Если не понимать что хорошо, а что плохо, не будет никакого развития.
Линукс кажется сложным? Так вы ещё не пробовали под MacOS софт писать, так что бы обеспечить совместимость между версиями.
Если вы пишите софт под определенную ОС, то это предполагает, что вы имеете достаточные для этого компетенции, в противном случае не делайте этого, ваши пользователи вас проклинать будут.
Что касается красноглазия, то на мой взгляд все давно поменялось. Недавно обновили ноутбуки с женой, настройка ноутбука жены (Windows 10) заняла у меня половину дня. Установка Windows, установка драйверов, установка софта, настройка. Завести старый принтер был целый квест. Без гугла я бы не справился.
А теперь мой линукс. Установка дистрибутива в пару нажатий - 5 минут, установка необходимого софта из магазина приложений - 5 минут, 5 минут на копирование данных из домашнего каталога старой машины. Все. 15 минут и машина готова к работе. И все это не требует вообще никаких знаний и умений.
Это с точки зрения обычного пользователя. Но я же разработчик. Полчаса я потратил на установку и настройку инструментов разработки (несколько версий php,Xdebug, apache, mysql, postgresql, NetBeans, git, fpc и Lazarus), не знаю как сейчас, но 10 лет назад поднять это все на Windows и заставить работать как надо - вот где красноглазие.
А теперь пару слов по теме.
В Linux так не делается. И здесь действительно придется разбираться как это работает и выбирать правильное решение.grot писал(а):Речь идет о статически-собранном бинарнике, у которого нет зависимистей на посторонние библиотеки !
Самое правильное, собрать установочный пакет, у которого в зависимостях будут все необходимые библиотеки. Если используются какие то специфичны библиотеки или старые версии библиотек, то здесь есть несколько простых путей.
1. Положить необходимые библиотеки в пакет, устанавливать в /opt и запускать со своими библиотеками.
2. AppImage - https://ru.wikipedia.org/wiki/AppImage
3. Использовать snap или flatpack
https://ru.wikipedia.org/wiki/Snappy_(% ... %BC%D0%B8)
https://ru.wikipedia.org/wiki/Flatpak
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
В точности по анекдоту - " - Но вот сосед рассказывает... - И вы тоже рассказывайте."WAYFARER писал(а):Что касается красноглазия, то на мой взгляд все давно поменялось. Недавно обновили ноутбуки с женой, настройка ноутбука жены (Windows 10) заняла у меня половину дня. Установка Windows, установка драйверов, установка софта, настройка. Завести старый принтер был целый квест. Без гугла я бы не справился.
А теперь мой линукс. Установка дистрибутива в пару нажатий - 5 минут, установка необходимого софта из магазина приложений - 5 минут, 5 минут на копирование данных из домашнего каталога старой машины. Все. 15 минут и машина готова к работе. И все это не требует вообще никаких знаний и умений.
Хотя, должен признать, что установка некоторых линухов, позиционированных для "домашнего пользования", последние несколько лет стала дружелюбнее. Но "шаг вправо, шаг влево" и приходится переустанавливать с нуля. С виндой такого не случается со времен ХР. Всегда можно, как минимум, откатиться на предыдущую точку сохранения.
У нас нет выбора - придется идти в линукс. Эту задачу ставит время. По крайней мере, пока не будет настоящей нашей операционки. И мнение людей с опытом в других операционках полезно не отметать сразу, а разбираться. Возможно, что оно правильное. Вот, инсталлятор в винде значительно лучше, чем пакеты в линуксе. А то что надо изучать никто не спорит. Вопрос, а зачем специально сделано, чтобы много надо было изучать? Ну, черный экран как в дос и какие-то команды, которые только сейчас, а потом никогда больше не нужны будут? Я понимаю, тут нет разработчиков линукс, поэтому вопрос риторический. Надеюсь, я такой херни в своих программах под линукс делать не буду. Ну, очень постараюсь.
Не уверен что знаю как можно так шагнуть влево или вправо что бы уронить систему. Единственное что мне удавалось сделать это уронить наглухо графическую подсистему установкой устаревшего драйвера для старой карточки nvidia (но я знал заранее чем это может обернуться). Но тоже вполне восстановимо (в безопасном режиме удалил драйвер и переустановил иксы).Снег Север писал(а): Но "шаг вправо, шаг влево" и приходится переустанавливать с нуля.
Справедливости ради стоит отметить что тоже самое происходило и в Windows (и восстанавливалось примерно так же - безопасный режим и удаление кривого драйвера).
И один раз сломал систему пакетов так, что починить не смог, это случилось при установке Linux версии 1C (Здесь привет криворуким разработчикам и мне самому, потому что не смотрел версии пакетов).
Так что не знаю куда вы там влево и вправо шагаете)).
Работа ведется под юзером с ограниченными правами, сломать что то случайно не получится. Если же ты под рутом лезешь куда не знаешь и совершаешь какие то действия, которых до конца не понимаешь, то кто тут виноват? И виндовс таким образом поломать ничуть не сложнее чем линукс, например удалить какой нибудь нужный системный файл, установить несовместимый драйвер/софт.
А что касается дружелюбности, то не могу говорить за все дистрибутивы, пользуюсь Ubuntu. С точки зрения обычного юзера там все выглядит и работает примерно как в MacOS или смартфоне на Android или iOS, все делается в пару кликов без необходимости что либо знать и думать и без возможности что либо сломать.
В современных версиях Windows (если не брать в расчет процесс установки и настройки, который нифига ни юзерфрендли) все примерно так же.
Точки восстановления в виндовс это круто, но не круто когда ими приходится пользоваться.Снег Север писал(а): Всегда можно, как минимум, откатиться на предыдущую точку сохранения.
Собственно в Linux, тоже есть подобные средства, но используются в основном на серверах и их использование требует некоторых продвинутых навыков, но зато сверхнадежны.
В винде это невозможно сделать кроме софта. Софт просто не будет работатьудалить какой нибудь нужный системный файл, установить несовместимый драйвер/софт.
Так сколько раз?
Вообще легко. Не далее чем несколько дней назад драйвера принтера привела к синему экрану и перезагрузке. Пришлось откатываться.stikriz11 писал(а):В винде это невозможно сделать кроме софта. Софт просто не будет работать
Уронить винду очень легко на самом деле. Существует миллион способов это сделать. Любое неосторожное действие и привет. Да что там говорить, если даже некоторые обновления ее роняют.
В корне не верный взгляд. Ни что из этого не лучше. И не хуже.stikriz11 писал(а):Вот, инсталлятор в винде значительно лучше, чем пакеты в линуксе.
И решения похожие на инсталляторы в виндовс тоже есть и активно используются там где надо.
Никто не мешает их использовать. Подавляющее большинство проприетарного софта для Linux именно так и распространяется.
Если мне кто то скажет что для разработки под Windows надо изучить меньше, то я скажу что этот человек не знает о чем говорит.stikriz11 писал(а):Вопрос, а зачем специально сделано, чтобы много надо было изучать?
И весь его софт - что то чуть сложнее Hello World.
И надо помнить, что в отличии от Windows, Linux это всего лишь ядро. И на этом ядре существует множество дистрибутивов, которые отличаются между собой и версией этого ядра, и версиями утилит, программ и библиотек, графическим сервером, средой рабочего стола и т.д. и .т.п.
Говоря простым языком это чертова куча разных ОС.
Собственно мы не делаем софт для Linux, мы делаем софт для Ubuntu, RHEL, Debian и прочих.
А ежели вам придется делать софт для отечественных дистрибутивов, то поздравляю, там разработчики с таким же как у вас подходом, скучно не будет)
