web-dev-qa-db-fra.com

Les versions de libc sont-elles liées aux versions du noyau?

Après avoir lu les réponses à ma question précédente , je suis parvenu à la conclusion qu’une réponse à la question suivante était ce que je cherchais réellement:

Est-ce qu'une version particulière du noyau nécessite une version particulière de libc pour fonctionner correctement?

Fondamentalement, mon problème provient de la création d’une application sur mon ubuntu 12.04 et de l’exécution de celle-ci sur 8.04. Depuis, j'ai appris de ce forum et d'autres forums stackexchange que c'est la compatibilité avec les versions antérieures de la libc qui est à l'origine de ces problèmes. Par conséquent, ce que j'essaie peut-être naïvement de faire, c'est de construire la même version de libc que celle qui existe sur ma cible, puis de créer un lien avec celle de mon hôte lorsque je crée l'application. Ensuite, dans un monde idéal, lorsque je copie ceci sur l'hôte, après avoir été lié à la "bonne" libc, cela devrait fonctionner (dans ma tête du moins). Je suis totalement incapable de trouver un moyen d'installer une ancienne libc sur mon système et je me demande si chaque version est étroitement liée à une version du noyau, d'où la question ci-dessus.

7
mathematician1975

Est-ce qu'une version particulière du noyau nécessite une version particulière de libc pour fonctionner correctement?

Oui, sauf si vous construisez vous-même le noyau à partir du source avec votre version préférée de libc. Les noyaux Ubunt sont construits sur la version LTS antérieure à la version cible. Les "derniers" noyaux Ubuntu compatibles avec 8.04 libc étaient donc ceux d'Ubuntu 9.10.

4
ish

Ils sont liés les uns aux autres, d'une certaine manière.

  • Le noyau sur lequel vous travaillez a été compilé avec une libc spécifique.
  • La libc que vous avez été compilée pour ne supporter que les noyaux supérieurs à une version spécifique.

Donc, si vous installez les paquets du noyau et les paquets libc à partir du référentiel Ubuntu, au lieu de les compiler vous-même, vous vous retrouvez avec le dilemme ci-dessus.

En ce qui concerne libc, une façon de faire ce que vous proposez est de compiler le noyau 12.04 à partir du code source le 8.04 , en le reliant ainsi au 8.04 libc. Ensuite, vous utilisez ce noyau personnalisé pour démarrer 12.04, sur lequel vous compilez la version de libc se trouvant sur 8.04, également à partir du source. Vous installez cela et vos applications doivent partager le même ancien 8.04 libc.

Je suppose que vous savez également que toutes les autres bibliothèques 12.04 auxquelles votre application est liée peuvent ne pas être disponibles dans 8.04, vous devrez donc les compiler à partir des sources aussi ...

Pour résumer, le mieux est de compiler le 8.04.

5
Bogie