Je construis souvent diverses bibliothèques du code source à jouer avec, telles que GMP-6.1.2, MPFR-4.0.1 et GCC-7.x. Ce faisant, je préfère utiliser --prefix=/usr/local/gcc-7.2.0
Donc, je sais exactement où il est installé et ne gâche pas les bibliothèques existantes. Et puis j'ai tout ce que je sais essentiellement, c'est ce que make install
Me dit à la fin, à mettre à jour ou à définir LD_LIBRARY_PATH
Et parfois mais pas toujours LD_RUN_PATH
.
la plupart du temps, je viens de définir manuellement LD_LIBRARY_PATH
Au besoin, ou la définir globalement dans quelque chose comme /etc/bash.bashrc.local
et cela a fonctionné.
C'est ce que dit make install
Dit:
Libraries have been installed in:
/usr/local/mfprtest/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the 'LD_RUN_PATH' environment variable
during linking
- use the '-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to '/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
Existe-t-il une meilleure façon, ou une voie plus agitée? d'utiliser ldconfig and ld.so.conf
Que d'utiliser LD_LIBRARY_PATH
Et LD_RUN_PATH
Et PATH
? Ceci est spécifiquement pour écrire mon propre code, mais pourriez être pour d'autres utilisateurs, où je souhaite créer un lien avec diverses versions plus récentes d'une bibliothèque que celle installée avec une version Linux donnée, telle que GMP, MPFR, puis en utilisant diverses versions installées manuellement. de GCC tel que GCC-5.x ou GCC-6.x ou GCC-7.X.
fondamentalement, une fois que j'installe /usr/local/gcc-7.3.0
Par exemple, je veux moi-même et tout autre utilisateur qui écrit ou exécute un code source Grown C, C++ ou Fortran sur le système d'utiliser /usr/local/gcc-7.3.0
et pas le Versions système dans/usr/bin/and/usr/lib64 /
La solution à cela consiste à ajouter vos répertoires de bibliothèque /usr/local/gcc-7.3.0/lib/
à /etc/ld.so.conf
(ou un fichier dans /etc/ld.so.conf.d/
) et exécuter ldconfig
ou modifier les profils de coquille des utilisateurs pour remplacer les systèmes 'LD_LIBRARY_PATH
/LD_RUN_PATH
et ajouter l'individu */lib
Entrées de sorte que la liaison puisse trouver les objets partagés.
Une fois que vous avez commencé à ajouter des bibliothèques, la complexité du maintien de ces augmentations, alors gardez cela à l'esprit.
Une autre option que vous avez est de relier tous les fichiers de /usr/local/<library>/{bin,lib,include} into /usr/local/{bin,lib,include}
. Cela simplifie grandement le ld.so.conf
ou LD_LIBRARY_PATH
/LD_RUN_PATH
Bien que vous devriez vivre avec Messy /usr/local/{bin,lib,include}
.
Le moyen "officiel" de faire est d'utiliser le gestionnaire de packages du système et d'installer les versions maintenues de la distribution des bibliothèques dans les emplacements choisis (/usr/lib/
, /lib
, etc).
Pour les exécutables (par opposition aux bibliothèques), les utilisateurs devront avoir un PATH
correctement défini dans leur environnement. Cela peut être fait soit via leurs propres fichiers de démarrage shell, soit à l'échelle du système, par exemple via /etc/profile
(MAIS Notez que ce fichier n'est pas garanti d'être lu sous toutes les configurations).
Maintenant, pour les bibliothèques, telles que GMP et MPFR:
ldconfig
(et éventuellement /etc/ld.so.conf
) peut être la meilleure solution. Mais notez que si les utilisateurs veulent compiler contre ces bibliothèques, ils auront également besoin de LIBRARY_PATH
et CPATH
(ou C_INCLUDE_PATH
, etc.).Noter: LD_LIBRARY_PATH
est toujours utile pour des choses temporaires (E.G. Test) et des bibliothèques installées dans le répertoire de base de l'utilisateur (il ne semble pas y avoir l'équivalent à ldconfig
pour la configuration de côté de l'utilisateur). Mais cela peut remplacer le chemin d'exécution , qui est un problème dans certains cas (par exemple pour make check
Pour vérifier une bibliothèque qui vient d'être construite et pour laquelle une version précédente et compatible est déjà installée).