Gdyby to była jakaś inna biblioteka, ale glibc ... Przypuszczam, że nie ma szybkich sposobów, ponieważ glibc jest miejscem, w którym rzeczy są „zakodowane na stałe”. Glibc pasuje do twojej wersji jądra, a jego moduł ładujący jest instancją, która faktycznie robi właściwą rzecz (TM) LD_LIBRARY_PATH
.
Może poprawnym sposobem jest:
LD_LIBRARY_PATH="/opt/myglibc/;..." /opt/myglibc/ld-linux.so.2 the_program`
Nie jestem jednak pewien, czy to działa.
W każdym razie myślę, że użycie alternatywnego glibc wymaga jeszcze implementacji frameworka, ponieważ ścieżki wyszukiwania są czasami okablowane, a glibc zawsze musi pasować do twojego systemu operacyjnego / jądra, więc nie może być ogólnych plików binarnych, IMO. Multiarch Debiana pokazuje, że nie jest to banalne, ale wciąż można to zrobić. Jeśli ktoś ma mieć inne sposoby rozpoznawania bibliotek oprócz architektury docelowej.
Witryna właśnie dała mi ten inny powiązany wątek:
Tam zaakceptowana odpowiedź zawiera link do programu o nazwie rtldi , który wydaje się rozwiązać problem glibc. Jest z 2004 roku, więc może już nie działa od linkera, ale może warto go przyjrzeć. Jego źródłem jest GPLv2.
Jehova, Jehova
Mój przyjaciel wpadł kiedyś na pomysł, że faktyczne wykorzystanie bibliotek współdzielonych jest przereklamowane. I ma on rację: biblioteki współdzielone są dobre, aby nie zapełniać pamięci komputera duplikatami, ale biorąc pod uwagę wystąpienie pojedynczej aplikacji, jest to tylko kilka MB.
Istnieje tylko kilka aplikacji, w których moglibyśmy zastosować takie działania, jak zapewnienie im własnego glibc. Oszczędzając nam długiej analizy nazwijmy je „aplikacjami natychmiastowymi”, które same są przydatne w sensie wykonywania pracy. Na przykład przeglądarki internetowe, pocztowe programy użytkownika, kombinezony biurowe i odtwarzacze muzyki pozwalają użytkownikowi uzyskać to, czego chcą, a na użytkownika przypada tylko kilka wystąpień. Aby zilustrować drugą stronę, usługi systemowe, menedżery okien, a nawet całe środowiska pulpitu są bardzo ważne, ale jedynie wsparcie i często niewystarczająco rzadkie lub krytyczne, aby ludzie byli gotowi dać im własne glibc.
Liczba „bezpośrednich aplikacji” jest raczej niewielka, absolutnie na użytkownika i względnie w porównaniu do tego, co „podstawowe” systemy operacyjne i DE pojawiają się obecnie. Gdyby bezpośrednie aplikacje, takie jak Chrome, Firefox zostały skompilowane statycznie, dodatkowe zapotrzebowanie na pamięć dla przeciętnego systemu wyniosłoby kilka 100 MB. Argument, który nie przenosi się zbyt daleko na dzisiejsze wiele systemów GB, więc statyczne połączenie dla natychmiastowych aplikacji może być opcją.
Istnieją również koncepcje przestrzeni wymiany i dysków SSD, które pozwalają na wyjątkowo szybką zamianę / wyjście, co również pomaga obsłużyć zwiększone zapotrzebowanie na pamięć.
Omawiany tutaj problem glibc nie jest tak naprawdę rozwiązany przez statyczne łączenie, ale dla aplikacji takich jak przeglądarka internetowa można sobie wyobrazić niezależny format dystrybucji, w którym jedynym interfejsem jest protokół X, demon dźwięku i niektóre jądra. Zaletą byłoby mniej niezgodności wersji bibliotek.
du -h /lib
), należy pamiętać, że gdyby były one skompilowane statycznie, taka ilość pamięci RAM byłaby wymagana dla każdego i każda aplikacja z nimi skompilowana. Więc jeśli np. masz dwie aplikacje korzystające z tego samego stosu bibliotek, teraz potrzebujesz dwa razy więcej pamięci. Trzy aplikacje? Trzy razy tyle. Nie wspominając o tym, że w dużej mierze zniweczyłoby to korzyści płynące z buforowania .../lib
, z czego 202 MB to moduły jądra. Tak,/usr/lib
wynosi 4 GB, ale nie pozwala to na wyciągnięcie wniosków co do tego, ile wymaga dany program. Pamięci podręczne procesorów to tylko kilka MB. Przy zużyciu pamięci przez coś w rodzaju najnowszej przeglądarki internetowej wpływ statycznie połączonych plików binarnych na buforowanie również nie jest tak duży i maleje wraz z ilością programów działających jednocześnie; również ze względu na stosunkowo małe skrzynki. Moje szacunki wydają się bardziej dokładne niż twoje. Tak.