создание переносимных бинарников (под Linux)

Landstreicher

Нужно сделать бинарник, который работает в различных дистрибутивах Linux, причем как на новых, так и на очень старых. Процессор везде x86 (можно даже считать i686). Единственная проблема - в библиотеках, они везде разных версий. И еще в система на gcc-2.x и на gcc-3.x разный name mangling так что libstdc++ тоже не совместимое. Вобщем, чего делать? Если я просто буду таскать все либы (начиная с libc.so взятые с моей тачки, то будет ли оно работать в другом месте? Еще есть вариант создать какой-нибудь chroot и туда все собирать (gcc, либы, прогу). Я так недавное пытался сделать - выяснилось что в некоторых местах такой древний линкер, что не понимает .o файлы который генерит новый gcc-3.3.1. Пришлось собирать и тащить с собой binutils. Нужно ли собирать glibc? Насколько я знаю, там есть versioned символы. То есть если я соберу у себя то могу заюзать какой-нибудь r@GLIBC_2.2, которого в glibc-2.1 нету. Есть варинат собрать свою glibc и таскать ее с собой. Но для сборки glibc нужно указывать каталог где лежат исходники ядра. А на этих машинах может стоять разное ядро (но везде >=2.4.x). Так что я не понимаю какие исходники ей давать.

Есть ограничение, что статически линковаться нельзя. А именно, приложение очень сложное, в нем есть плагины, которые грузятся из библиотек вида .so. Некоторые библиотеки просто очень большие, если их линковать статически, будут очень большие бинарники.
Кто-нибудь может чего-нибудь посоветовать?

tokuchu

Хмм... а статически прилинковать только библиотеки из lbc, а плагины оставить как есть тоже не вариант?

abrek

glibc таскать с собой
исходники ядра давать более-менее любые, главное, не отключать при сборке glibc совместимость со старыми ядрами, она помнит все особенности старых ядер и умеет проверять, например, отсутствие новых системных вызовов и обходиться без них
помнить про грабли с nss, как точно с этим бороться, я не знаю, но все говорят, что это возможно
Оставить комментарий
Имя или ник:
Комментарий: