Qu'est-ce que LD_LIBRARY_PATH?

Qu'est-ce que LD_LIBRARY_PATH?
Avant de connaître le chemin LD_Library, vous devriez avoir le concept de variables d'environnement. Mais si tu ne sais pas, ne t'inquiète pas, je vais expliquer ce que c'est. Les variables dont la valeur est déterminée par le système d'exploitation ou la capacité de microservice sont appelées variables environnementales. Une variable d'environnement est une valeur désignée dynamiquement qui peut influencer le comportement des processus informatiques en cours d'exécution. Le processus s'exécute dans la composante de l'environnement du processus.

Tout d'abord, des variables d'environnement ont été développées pour Unix, mais maintenant Windows et Linux ont également ces variables. Lorsqu'un processus est créé, il hérite d'une copie de l'environnement d'exécution de ses parents, à l'exception des modifications explicites apportées par le parent lorsque l'enfant est créé par défaut. Une paire de nom / valeur constitue une variable d'environnement, et n'importe quel nombre peut être généré et référencé à tout moment. Les lettres courantes de cas sont généralement utilisées lors de la nomination des variables d'environnement. Cela aide à différencier les variables d'environnement des autres types de noms dans le code de programmation en général.Dans le système d'exploitation UNIX, les variables d'environnement sont sensibles à la casse, mais pas sur DOS, OS / 2 ou Windows.

LD_LIBRARY est également une variable d'environnement du système d'exploitation UNIX / Linux; Dans cet article, nous discuterons en détail de cette variable d'environnement.

Utilisation de la variable LD_LIBRARY_PATH

Dans le système Unix / Linux LD_LIBRARY_PATH Pour dire dynamique Link Loader, un petit programme qui commence toutes vos applications, pour déterminer où rechercher des bibliothèques partagées dynamiques avec lesquelles une application était liée. Un côlon (:) sépare une liste des répertoires, et cette liste est vérifiée avant même le chemin de recherche / chemins de recherche intégré et des emplacements conventionnels comme (/ lib, / usr / lib…).

Certaines autres utilisations de LD_LIBRARY_PATH sont:

  • Comparaison de nouvelles versions d'une bibliothèque partagée à une application qui a déjà été compilée.
  • Relocalisation des bibliothèques partagées, par exemple, pour maintenir les versions précédentes en vie.
  • Il est également utilisé pour créer un environnement de système auto-assujetti et relocable pour des applications plus grandes afin qu'elles soient indépendantes de l'évolution des bibliothèques de systèmes.

Problème avec LD_LIBRARY_PATH

Il est très utile jusqu'à ce que vous essayiez de l'utiliser pour résoudre vos problèmes. Cette ligne semble étrange, mais c'est ce qui se passe vraiment lorsque vous essayez de l'appliquer dans un environnement utilisateur / système, le scénario s'aggrave et toutes les variables environnementales commencent en fonction de celle-ci et elle se bloque car elle ne peut pas gérer toutes les tâches!

Certains problèmes rencontrés à l'aide de LD_LIBRARY_PATH sont:

Sécurité: Les répertoires LD_LIBRARY_PATH sont vérifiés en premier, avant leur emplacement réel. Cette approche pourrait être utilisée par une personne malveillante pour forcer votre application à exécuter une version malveillante d'une bibliothèque partagée. L'une des raisons pour lesquelles les exécutables setuid / setgid ignorent cette variable est à cause de cela.

Performance: Le chargeur de liaison doit regarder dans tous les répertoires fournis jusqu'à ce qu'il trouve des bibliothèques partagées (liées à l'application). Par conséquent, plusieurs appels système s'ouvrent et les feront s'écraser avec Enoent «Aucun fichier ou répertoire de ce type». Si le chemin spécifié a de nombreux répertoires, il faudra beaucoup de temps et vous pouvez le vérifier à partir de l'heure de démarrage de votre application. En conséquence, cela entraînera le ralentissement de l'ensemble du système.

Incohérence: Le problème le plus répandu causé par l'utilisation de LD_LIBRARY_PATH est l'incohérence. LD_LIBRARY_PATH oblige un programme pour charger une bibliothèque partagée contre laquelle il n'était pas lié, ce qui est très certainement incompatible avec la version originale. Cela peut être très évident, comme lorsque l'application se bloque, ou cela peut entraîner des résultats incorrects si la bibliothèque ramassée ne correspond pas exactement à la fonctionnalité de la version d'origine. Ce sera difficile à déboguer ce dernier, en particulier.

Solution

La meilleure solution est moins que vous l'utilisez, moins vous aurez de problèmes auxquels vous serez confrontés. Essayez d'éviter l'utilisation de LD_LIBRARY_PATH:

Comment éviter LD_LIBRARY_PATH:

Fournir un emplacement correct de la bibliothèque partagée: Lorsque vous compilez votre application, vous devez fournir une emplacement exact des bibliothèques partagées et spécifier le chemin d'accès à l'option de liaison '-rpath' pour informer le linker pour les inclure dans RunPath de votre exécutable ou vous pouvez utiliser la variable LD_RUN_PATH pour spécifier plusieurs chemins

Outil pour résoudre le problème:Pour corriger / modifier le runpath d'un exécutable binaire, il existe des programmes disponibles, comme Chrpath sous Linux. Le problème de cette manière est que l'espace exécutable qui porte ces informations (i.e. la chaîne de chemin) ne peut pas être élargie, je.e. Vous ne pouvez réécrire qu'un chemin existant.

Ne mettez pas LD_LIBRARY_PATH dans le profil utilisateur: En mettant LD_LIBRARY_PATH dans le profil utilisateur, vous allez vous créer des problèmes, alors évitez ceci.

Ne mettez pas LD_LIBRARY_PATH dans le profil du système: Certains ISV fournissent un logiciel qui insère automatiquement les paramètres globaux du chemin de la bibliothèque LD dans les profils système pendant l'installation, ou même invite l'utilisateur à le faire. Dites simplement non! Essayez de gérer le problème d'une autre manière, par exemple en écrivant un script de wrapper, ou dites au vendeur de le rectifier.

LD_LIBRARY_PATH est utile s'il est utilisé pour trois utilisations qui sont mentionnées dans la partie d'utilisation, mais essayez de l'utiliser le moins possible pour vous protéger des ennuis.

Conclusion

LD_LIBRARY_PATH est une variable environnementale utilisée dans les systèmes Linux / Unix. Il est utilisé pour indiquer aux chargeurs de liens dynamiques où chercher des bibliothèques partagées pour des applications spécifiques. C'est utile jusqu'à ce que vous ne le plaisantez pas. Il est préférable d'éviter l'utilisation de LD_LIBRARY_PATH et d'utiliser des alternatives. Dans cet article, l'utilisation de la variable environnementale LD_LIBRARY_PATH est discutée, puis le problème avec son utilisation est discuté puis sa solution. Après avoir lu cet article, vous apprenez les avantages et les inconvénients de la variable LD_LIBRARY_PATH.