Распространение 32-битного двоичного кода ELF со статической связью - будет ли он работать на всех платформах? - PullRequest
3 голосов
/ 31 августа 2010

Моя команда готова выпустить первую версию нашей программы для Linux и хотела бы сделать это как можно проще (для пользователей).

Программа не требует внешних файлов, не требует установки истатически связаны.

ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.15, not stripped

Мой вопрос заключается в том, будет ли такой двоичный файл работать на большинстве платформ Linux (Ubuntu, Redhat, OpenSuse и т. д.)?

Я также немного обеспокоенчасть, где написано «для GNU / Linux 2.6.15», означает ли это, что им нужно ядро ​​2.6.15 или выше?

1 Ответ

3 голосов
/ 31 августа 2010

Полностью статически связанные программы больше не рекомендуются.

Уровень переносимости переместился из вызовов ядра в базовые библиотеки (помните pthread desaster и проблемы с потоками LinuxThreads <-> NPTL?).

Следуйте стандарту LSB 4.0.Доверьтесь существованию упомянутых там библиотек (не так много, к сожалению) и объедините все другие разделяемые библиотеки с вашим приложением.Есть флаг компоновщика - я думаю, что это -L - где вы можете установить ldd путь, который имеет приоритет над всеми другими настройками во время загрузки общей библиотеки, так что ваши библиотеки всегда загружаются первыми.

Убедитесь, что все библиотеки вызывают только API-функции, одобренные LSB (или посмотрите на веб-сайте LSB и посмотрите, насколько серьезен неподдерживаемый вызов API LSB - иногда вы просто не можете избежать этого, и у нихсписок дистрибутивов, которые поддерживают этот вызов).

Это рекомендуемый способ доставки двоичных исполняемых файлов.И это все еще отстой в Linux по сравнению с Windows / MacOSX.

...