2010-01-15 8 views
2

J'ai une bibliothèque partagée linux (.so) compilée avec une version spécifique de libc (GLIBC2.4) et je dois l'utiliser sur un système avec une version différente de libc. Je n'ai pas de sources pour la bibliothèque en question, donc je ne peux pas recompiler pour le nouveau système. Est-il en quelque sorte possible de changer les dépendances dans cette bibliothèque à une autre libc?Reliez une bibliothèque partagée à une version différente de libc

+0

Je suppose que vous devez le faire tourner contre une version * plus ancienne * de la glibc? – bmargulies

Répondre

2

Si vous avez besoin du .so sur un système avec une ancienne glibc, vous aurez besoin du code source et recompilez/reliez-le avec l'ancienne glibc. L'alternative est d'installer la glibc requise sur l'ancien système dans un emplacement autre que celui par défaut et d'ajuster le LD_LIBRARY_PATH pour l'exécutable qui en a besoin.

S'il y a une nouvelle glibc plutôt, cela ne devrait normalement pas poser de problème comme glibc ont tendance à être rétrocompatibles.

1

Le mieux que vous puissiez faire est de compiler l'ancienne version de la glibc pour votre système, puis de compiler votre application avec cette glibc et votre bibliothèque partagée. Laide ...

3

À moins que votre bibliothèque n'utilise réellement des interfaces qui ont changé (peu probable), vous pouvez simplement valider les références aux versions dans le fichier .so résultant. Ils sont tous du texte de toute façon.

+0

Très hackish, comme c'est la question. Je ne savais pas que les références étaient tout le texte. –

+0

Les chaînes de version GLIBC _... ne sont pas toutes en texte, si vous les modifiez en version inférieure dans le fichier binaire, le symbole ne fonctionnerait toujours pas. – pts

+0

Ce sont des textes. Ils sont dans la table de chaînes '.dynstr' tout comme les chaînes pour les noms de symboles à résoudre. –