Se fosse para qualquer outra biblioteca, mas a glibc ... suponho que não possa haver maneiras rápidas, porque a glibc é o lugar onde as coisas são "codificadas". O glibc se adapta à sua versão do kernel e seu carregador é a instância que realmente faz a coisa certa (TM) LD_LIBRARY_PATH
.
Talvez a maneira correta seja:
LD_LIBRARY_PATH="/opt/myglibc/;..." /opt/myglibc/ld-linux.so.2 the_program`
Não tenho certeza se isso funciona, no entanto.
De qualquer forma, acho que o uso de um glibc alternativo exige uma estrutura ainda a ser implementada, porque os caminhos de pesquisa às vezes são conectados e o glibc sempre precisa se ajustar ao seu OS / kernel, para que não haja binários genéricos, IMO. O multiarch do Debian mostra que não é trivial, mas ainda pode ser feito. Se alguém tiver outros meios de discernir as bibliotecas além da arquitetura de destino.
O site acabou de me fornecer outro tópico relacionado:
Lá, a resposta aceita inclui um link para um programa chamado rtldi , que parece resolver o problema da glibc. É de 2004, então pode não funcionar mais com o vinculador, mas talvez valha a pena investigar. Sua fonte é GPLv2.
Jehova, Jehova
Um amigo meu teve a ideia de que o uso real de bibliotecas compartilhadas é superestimado. E ele tem razão: as bibliotecas compartilhadas são boas para não encher a memória do computador com duplicatas, mas considerando a instância individual do aplicativo, são apenas alguns MBs.
Existem apenas algumas aplicações nas quais recorreríamos a ações como fornecer a elas sua própria glibc. Economizando uma longa análise, vamos chamá-los de "aplicativos imediatos", que são úteis por eles mesmos, no sentido de concluir o trabalho. Por exemplo, navegadores da web, agentes de usuários de email, roupas de escritório e tocadores de música permitem que o usuário obtenha o que deseja e há apenas algumas instâncias por usuário. Para retratar o outro lado, serviços de sistema, gerenciadores de janelas e até ambientes de desktop inteiros são todos muito importantes, mas meramente suportam e geralmente não são suficientemente incomuns ou críticos, para que as pessoas estejam dispostas a dar a eles seu próprio olhar.
O número de "aplicativos imediatos" é bastante pequeno, absolutamente por usuário e relativamente comparado ao que os SOs e DEs "básicos" geram atualmente. Se aplicativos imediatos, como o Chrome, o Firefox fossem compilados estaticamente, o requisito de memória adicional para o sistema médio seria de alguns 100 MB. Um argumento que não leva muito longe nos muitos sistemas atuais de GB, portanto a vinculação estática para aplicativos imediatos pode ser uma opção.
Existem também os conceitos de espaço de troca e SSDs que permitem troca / saída rediculamente rápida, o que também ajuda a lidar com os requisitos de memória aumentada.
O problema glibc discutido aqui não é realmente resolvido através da vinculação estática, mas para aplicativos como o navegador da web é possível conceber um tipo de formato de distribuição independente, onde o protocolo X, algum daemon de som e alguns métodos de kernel são a única interface. A vantagem seria menos incompatibilidades da versão da biblioteca.
du -h /lib
), lembre-se de que, se essas fossem compiladas estaticamente, essa quantidade de RAM seria necessária para cada e todos os aplicativos compilados com eles. Então, se, por exemplo. você tem dois aplicativos usando a mesma pilha de bibliotecas, agora precisará de duas vezes mais memória. Três apps? Três vezes mais. Sem mencionar que, em grande medida negar os benefícios do cache .../lib
, dos quais 202 MB são módulos do kernel. Sim,/usr/lib
tem 4 GB, mas isso não permite conclusões precisas sobre quanto o programa individual exige. Os caches dos processadores têm apenas alguns MB. Com o consumo de memória de algo como um navegador da Web recente, o impacto de binários vinculados estaticamente no cache também não é tão grande e diminui com a quantidade de programas em execução simultaneamente; também pelo motivo de caches relativamente pequenos. Minhas estimativas parecem mais precisas que as suas. Sim.