Страница 1 из 5

Совместимость бинарника со всеми Linux

СообщениеДобавлено: 25.09.2023 12:23:12
grot
Хочу добиться возможности создания бинарных исполняемых файлов,
совместимых с (почти) всеми версиями Linux !

Например, эта программа собирается (статически) на CentOS 7 64-bit и
благополучно выполняется на Debian (11 - ?) 64-bit :
Код: Выделить всё
program hello;
begin
   whileln('Hello !');
end.


Если взять что-нибудь посложнее ( примеры из Wiki по fpWeb ),
то, вне зависимости от статической или динамической сборки,
получаю на Debian (11 - ?) 64-bit ошибку :
Segmentation fault

Есть ли какие подходы заставить это работать ?

Re: Совместимость бинарника со всеми Linux

СообщениеДобавлено: 25.09.2023 12:39:20
RRYTY
grot писал(а):Хочу добиться возможности создания бинарных исполняемых файлов,
совместимых с (почти) всеми версиями Linux !

Как только четко сформулируете, что такое "версия Linux", так сразу же сможете грамотно сформулировать задачу. До этого момента тыкаться вслепую бессмысленно.

Re: Совместимость бинарника со всеми Linux

СообщениеДобавлено: 25.09.2023 12:52:57
grot
Хочу как в Windows , где :
32-bit EXE будет запускаться везьде , начиная с Windows-95 и заканчивая теми версиями, котрые еще даже не вышли.

В Linux пусть это будет любой 64-bit дистрибутив с любой версией kernel , c любой версией LibC, любой версией (...) и т.д.

Речь идет о статически-собранном бинарнике, у которого нет зависимистей на посторонние библиотеки !

Re: Совместимость бинарника со всеми Linux

СообщениеДобавлено: 25.09.2023 13:54:48
RRYTY
grot писал(а):В Linux пусть это будет любой 64-bit дистрибутив с любой версией kernel , c любой версией LibC, любой версией (...) и т.д.
.

Рекомендую сделать ссылку на репозитарий (пусть даже и локальный), откуда, в зависимости от платформы, будет браться нужный бинарник.

Re: Совместимость бинарника со всеми Linux

СообщениеДобавлено: 25.09.2023 14:51:14
delphius
grot писал(а):Речь идет о статически-собранном бинарнике, у которого нет зависимистей на посторонние библиотеки !

Участвовал в обсуждении подобной темы в соседнем англ форуме, соображения свои высказал тут

Но я абсолютно далек от философии/концепций/подходов Линкус, а руководствовался только здравым смыслом и аналогией с Windows, раз ядро одно и то же, то обеспечь полную автономность (статически слинкуй все зависимости или имей их рядом с собой в папке программы .so и подгружай их динамически, не влияя при этом на остальную систему) и ты запустишься на любом линуксе.

Re: Совместимость бинарника со всеми Linux

СообщениеДобавлено: 25.09.2023 20:00:27
grot
Продолжаю испытания с
примером из Wiki по fpWeb, статически собранным :

SuSE 15.4 Leap 64-bit на ноутбуке -> OK
Debian 11 64-bit скачанный эталонный образ VDI для VirtualBox -> OK

Похоже, прежняя неудача с Debian 11 64-bit ( что стоял у хостинг-провайдера, закастомизированный в корягу ...) - не моя проблема,
а особенность данной инсталляции Debian 11 ...

Re: Совместимость бинарника со всеми Linux

СообщениеДобавлено: 25.09.2023 21:08:10
RRYTY
grot писал(а):Похоже, прежняя неудача с Debian 11 64-bit ( что стоял у хостинг-провайдера, закастомизированный в корягу ...) - не моя проблема,
а особенность данной инсталляции Debian 11 ...


Это одна из проблем вирусов под Linux. :-D
И, судя по:

grot писал(а):В Linux пусть это будет любой 64-bit дистрибутив с любой версией kernel , c любой версией LibC, любой версией (...) и т.д.


все-таки теперь ваша.

Кстати, тоже столкнулся с проблемой несовместимости бинарника. Полгода-год назад собранные в моей среде разработки бинарники запускались в Astra. После обновления - перестали, glibc в Astra слишком звездный. У меня rolling-release, так что просто признал для себя Astra падшей еще при рождении веткой, забил на ее поддержку. Единственный выход был - собирать бинарники в Astra, какое-то время так и делал, но там Lazarus тоже зазвездился (да и логотип Astra как бы намекает на врожденную отсталость генетического уровня), корячиться не стал.

Re: Совместимость бинарника со всеми Linux

СообщениеДобавлено: 26.09.2023 00:09:37
Seenkao
Можно сделать совместимость со многими Linux-дистрибутивами, вплоть до совместимости 32-х битных и 64-х битных.

Это затратно, как по времени, так и по ресурсам. "Полностью кроссплатформенное" приложение будет содержать в себе много лишнего кода и библиотек.

Процесс:
Надо скомпилировать все зависимые библиотеки, которые используются, для 32-х и 64-х битных систем. Чтоб ни каких зависимостей от внешних библиотек не было.
Настроить приложение, чтоб оно определяло какая система запустила приложение (32-х битная или 64-х?).
Ну и предоставлять пользователю именно полный пакет, со всеми сопровождающими библиотеками.

Можно размер приложения уменьшить, и предоставлять два разных приложения для 32-х и 64-х битных систем. Но пользователь должен уметь разбираться какое из этих приложений ему нужно.

Re: Совместимость бинарника со всеми Linux

СообщениеДобавлено: 26.09.2023 01:18:12
Ichthyander
RRYTY писал(а):Кстати, тоже столкнулся с проблемой несовместимости бинарника. Полгода-год назад собранные в моей среде разработки бинарники запускались в Astra. После обновления - перестал, glibc в Astra слишком звездный. У меня rolling-release, так что просто признал для себя Astra падшей еще при рождении веткой, забил на ее поддержку. Единственный выход был - собирать бинарник в Astra, какое-то время так и делал, но там Lazarus тоже зазвездился (да и логотип Astra как бы намекает на врожденную отсталость генетического уровня), корячиться не стал.

Мне кажется достаточно было бы собрать с нужной версий glibc, если проблема была именно в этом, необязательно было собирать на Astra. Какую версию glibc он кстати просил?

Добавлено спустя 2 минуты 17 секунд:
Сама архитектура Linux подразумевает некий плюрализм, поэтому задачу нужно не так ставить. Можно просить пользователей установить нужные пакеты, если вдруг их не оказалось. К примеру, можно указать зависимости в deb пакетах

Re: Совместимость бинарника со всеми Linux

СообщениеДобавлено: 26.09.2023 05:22:22
Seenkao
Ichthyander, код всё равно подогнать не получится. Или придётся использовать на "новых" системах "старый" код. А вообще, про зависимости надо было бы описать подробнее, тут не всем понятно будет про что ты вообще речь ведёшь.
Но в Linux наверно самое лучшее решение.

Re: Совместимость бинарника со всеми Linux

СообщениеДобавлено: 26.09.2023 08:12:08
RRYTY
Seenkao писал(а):достаточно было бы собрать с нужной версий glibc, если проблема была именно в этом, необязательно было собирать на Astra. Какую версию glibc он кстати просил?


Нужная для Astra версия как раз в Astra. В среде разработки еще и зоопарк glibc держать не хочется. Нужна версия не старее 2.34. Может, это только начало, потом что-то еще захочет. Да и lazarus там 1.6, мне туда не откатиться. На этом этапе остановился.

Seenkao писал(а):Процесс:
Надо скомпилировать все зависимые библиотеки, которые используются, для 32-х и 64-х битных систем. Чтоб ни каких зависимостей от внешних библиотек не было.
Настроить приложение, чтоб оно определяло какая система запустила приложение (32-х битная или 64-х?).
Ну и предоставлять пользователю именно полный пакет, со всеми сопровождающими библиотеками.


Livecd со своей программой. :-D

Re: Совместимость бинарника со всеми Linux

СообщениеДобавлено: 26.09.2023 23:19:34
stikriz11
Да. Мерзотность Linux в этом вопросе зашкаливает. Но, любой линуксоид скажет, что это очень хорошо. Ведь очень хорошо, что нужно постоянно как в далеких 90-х годах пользоваться черным экраном и заучивать или списывать или копипастить дурацкие крокозябры ничего не значащие для нормального человека. 21 век, пользователь должен страдать)

Re: Совместимость бинарника со всеми Linux

СообщениеДобавлено: 27.09.2023 15:46:40
RRYTY
stikriz11 писал(а):21 век, пользователь должен страдать)

Пользователь умер, это посмертные сокращения мышц: "Ах, непонятно! Ах, некрасиво! Ах, неизвестно!". Закапывайте уже. Пользователю псевдослучайная мазня в гермошлем, чтобы лежал и повизгивал. От пользователя - его ресурс, кто уж там чем богат. Six feet under.

Re: Совместимость бинарника со всеми Linux

СообщениеДобавлено: 27.09.2023 16:19:08
haword
grot писал(а):Хочу как в Windows

чтобы такое было на линуксе надо прогу писать на си и компилировать на той машине где будет запускаться, тогда гарантированно будет работать.
винда коммерческий продукт, обратная совместимость это ее фишка. но и то не всегда по написанное даже для 7 будет запускаться на 10 если использовались специфичные функции.

Re: Совместимость бинарника со всеми Linux

СообщениеДобавлено: 27.09.2023 22:29:15
stikriz11
Я просто не в курсе. В Linux не слышали про позднее связывание? Ну, по имени найти метод и уже тога вызвать? В чем конкретно проблема so? Почему в windows dll можно вызвать от предыдущей версии, а Linux нет?