As versões da libc estão vinculadas às versões do kernel?

7

Depois de ler as respostas às minhas pergunta anterior eu vim para a conclusão de que uma resposta para a seguinte pergunta é o que eu estava realmente procurando:

Uma versão particular do kernel requer que uma versão específica da libc seja executada corretamente?

Basicamente, meu problema está relacionado à criação de um aplicativo no meu Ubuntu 12.04 e a tentar executá-lo no 8.04. Desde então, aprendi com este e outros fóruns do stackexchange que a compatibilidade retroativa da libc causa esses problemas. Portanto, o que talvez eu esteja tentando ingenuamente fazer é construir a mesma versão da libc que existe no meu destino e, em seguida, vinculá-la ao meu host ao criar o aplicativo. Então, em um mundo ideal, quando eu copio isso para o host, tendo sido ligado à libc "correta", deve funcionar (na minha cabeça, pelo menos). Eu tenho sido totalmente incapaz de encontrar uma maneira de instalar uma libc mais antiga no meu sistema, e me perguntei se cada versão está strongmente ligada a uma versão do kernel, daí a pergunta acima.

    
por mathematician1975 12.07.2012 / 10:41

2 respostas

4
  

Uma versão particular do kernel requer que uma versão específica da libc seja executada corretamente?

Sim, a menos que você mesmo crie o kernel a partir do código-fonte com sua versão preferida da libc. Os kernels do Ubuntu são construídos com base na versão LTS anterior ao lançamento de destino, então os kernels Ubuntu "mais recentes" são compatíveis com 8.04 libc foram os do Ubuntu 9.10.

    
por ish 12.07.2012 / 11:05
3

Eles estão ligados um ao outro, de certa forma.

  • O kernel em que você está executando foi compilado com uma libc específica.
  • A libc que você tem foi compilada para suportar apenas kernels acima de uma versão específica.

Então, se você está instalando os pacotes do kernel e os pacotes libc dos repositórios do Ubuntu, ao invés de compilá-los você mesmo, você está preso ao dilema acima.

No que diz respeito à libc, uma maneira de fazer o que você propõe é compilar o kernel 12.04 a partir do source em 8.04 , ligando-o assim ao 8.04 libc. Então você usa esse kernel personalizado para inicializar o 12.04, sobre o qual você compila a versão da libc que está no 8.04, também a partir do código-fonte. Você instala isso e seus aplicativos devem compartilhar a mesma versão 8.04 libc.

Suponho que você também esteja ciente de que quaisquer outras bibliotecas 12.04 com as quais seu aplicativo está vinculado podem não estar disponíveis em 8.04, então você terá que compilá-las a partir da fonte também ...

Para resumir, é melhor apenas compilar em 8.04 .

    
por Bogie 12.07.2012 / 10:54