Если бы это было для любой другой библиотеки, но glibc ... Я полагаю, что не может быть быстрых путей, потому что glibc - это место, где вещи "жестко запрограммированы". Glibc подходит для вашей версии ядра, а его загрузчик - это тот экземпляр, с которым на самом деле все правильно (TM) LD_LIBRARY_PATH
.
Может быть, правильный путь заключается в:
LD_LIBRARY_PATH="/opt/myglibc/;..." /opt/myglibc/ld-linux.so.2 the_program`
Не уверен, что это работает, хотя.
В любом случае, я думаю, что использование альтернативного glibc требует еще реализации фреймворка, потому что пути поиска иногда связаны и glibc всегда должен соответствовать вашей ОС / ядру, поэтому не может быть общих двоичных файлов, IMO. Мультиархарх Debian показывает, что это не тривиально, но все же можно сделать. Если бы у кого-то были другие средства распознавания библиотек, помимо целевой архитектуры.
Сайт только что дал мне эту другую связанную тему:
Там принятый ответ содержит ссылку на программу rtldi , которая, похоже, решает проблему с glibc. Это с 2004 года, так что он может больше не работать прямо из компоновщика, но, возможно, его стоит изучить. Его источник - GPLv2.
Иегова, Иегова
Мой друг однажды пришел к мысли, что фактическое использование общих библиотек переоценено. И у него есть смысл: общие библиотеки хороши, чтобы не заполнять память вашего компьютера дубликатами, но, учитывая отдельный экземпляр приложения, это всего лишь несколько МБ.
Существует всего несколько приложений, в которых мы могли бы прибегнуть к таким действиям, как предоставление им собственного glibc. Для экономии времени мы будем называть их «непосредственными приложениями», которые сами по себе полезны в смысле выполнения работы. Например, веб-браузеры, почтовые агенты, офисные костюмы и музыкальные проигрыватели позволяют пользователю получить то, что он хочет, и на пользователя приходится всего несколько экземпляров. Для портретирования другой стороны очень важны системные службы, оконные менеджеры и даже целые десктопные среды, но они просто поддерживают и зачастую не достаточно необычны или критичны, так что люди захотят дать им свой собственный способ.
Количество «непосредственных приложений» довольно мало, абсолютно на пользователя и сравнительно с тем, что «основные» ОС и DE порождают в наши дни. Если бы непосредственные приложения, такие как Chrome, Firefox, были скомпилированы статически, дополнительная потребность в памяти для средней системы составила бы несколько 100 МБ. Аргумент, который не слишком далеко заходит во многих современных системах GB, поэтому статическое связывание для непосредственных приложений может быть вариантом.
Существуют также концепции пространства подкачки и твердотельных накопителей, которые предусматривают быструю перестановку / вывод, что также помогает справиться с возросшим требованием к памяти.
Обсуждаемая здесь проблема glibc на самом деле не решается при статическом связывании, но для таких приложений, как веб-браузер, возможен своего рода автономный формат распространения, где единственным интерфейсом является протокол X, некоторый звуковой демон и некоторые методы ядра. Преимущество будет меньше несовместимости версии библиотеки.
du -h /lib
), имейте в виду, что если бы они были скомпилированы статически, то объем ОЗУ требовался бы для каждого и каждое приложение, скомпилированное с ними. Так что, если, например. у вас есть два приложения, использующих один и тот же стек библиотеки, теперь вам потребуется вдвое больше памяти. Три приложения? В три раза больше. Не говоря уже о том, что это в значительной степени сведет на нет преимущества кэширования .../lib
, из которых 202 МБ являются модулями ядра. Да,/usr/lib
это 4 ГБ, но это не дает точных выводов о том, сколько требует отдельная программа. Кэши процессоров составляют всего несколько МБ. С потреблением памяти чем-то вроде недавнего веб-браузера влияние статически связанных двоичных файлов на кеширование также не так велико и уменьшается с количеством одновременно работающих программ; также по причине относительно небольших кешей. Мои оценки кажутся более точными, чем ваши. О да.