Bilbiothèque partagée: impossible de trouver libgfortran.so alors que gfortran et libgfortran sont installés

Bonjour à tous.

J’ai une difficulté à exécuter un programme (non issu d’un paquet validé) qui, vraisemblablement, fait appel à la bibliothèque libgfortran:

error while loading shared libraries: libgfortran.so.1: cannot open shared object file: No such file or directory

en suivant une réponse à cette question, j’ai tenté une installation avec:

apt-get install libgfortran3

Le résultat (ci-dessous) m’indique que libgfortran3 est déjà installée.

Lecture des listes de paquets… Fait
Construction de l’arbre des dépendances
Lecture des informations d’état… Fait
libgfortran3 est déjà la plus récente version disponible.
0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.

Idem pour gfortran. Donc, il semble que j’ai la bibliothèque installée, mais que le programme ne peut la trouver. En fouillant un peu, je l’ai trouvée avec

cd /usr/lib/gcc/x86_64-linux-gnu/
ls

retour:

4.8 4.8.4 4.9 4.9.2

et dans chacun de ces dossiers (qui correspondent, j’imagine, à des versions différentes de gcc; d’ailleurs, ai-je besoin de tout ça?), je trouve plus ou moins la même chose dans les 4 dossiers, e.g. dans 4.9.2:

cd 4.9.2
ls libgfortran*

qui retourne

libgfortran.a libgfortranbegin.a libgfortran.so libgfortran.spec

Je ne vois pas comment rendre global l’accès à cette bibliothèque, i.e. la partager.

De nombreux résultats sur le net retournent qu’il faut ajouter le dossier qui contient cette bibliothèque dans le $LD_LIBRARY_PATH; le mien est pour l’instant vide:

echo $LD_LIBRARY_PATH

ne retourne rien.

Je ne comprends pas grand chose à ces histoires de bibliothèques partagées, et là je ne sais absolument pas quoi faire… Une idée?
Merci de votre temps

chez moi la commande:

apt-file search libgfortran.so.1

ne retourne rien; par contre libgfortran.so.3 est fourni par le paquet libgfortran3 . Dans /usr/lib/x86_64-linux-gnu/ je tenterais un lien symbolique libgfortran.so.1 vers libgfortran.so.3

le paquet libx32gfortran3 fournit également libgfortran.so.3; essayer les deux via le le lien libgfortran.so.1 vers /usr/lib32/libgfortran.so.3

Merci du retour. Rapide!

Pour bien comprendre:

  • qu’est-ce qu’une objet partagé? (j’imagine un fichier qui termine par .so, mais encore…)
  • il faut qu’un chemin pointe vers libgfortran.so.1, peu import où se situe ce fichier (ou lien)?
  • Y a-t-il un chemin privilégié pour que cet type d’objet soit “vu” (i.e. partagé) par tout programme?

Sur mon Debian Jessie, la commande apt-file n’est pas trouvée:

apt-file search libgfortran.so.1

retourne

bash: apt-file : commande introuvable

J’ai suivi la réponse et j’ai fait un lien symbolique libgfortran.so.1 dans le répertoire /usr/lib/gcc/x86_64-linux-gnu/4.9.2 qui pointe vers libgfortran.so.3 dans même le répertoire (pour rappel, j’ai 4 versions 4.8, 4.8.4, 4.9, et 4.9.2, j’ai choisi la 4.9.2):

ln -s /usr/lib/gcc/x86_64-linux-gnu/4.9.2/libgfortran.so.3 /usr/lib/gcc/x86_64-linux-gnu/4.9.2/libgfortran.so.1

Le problème persiste:

error while loading shared libraries: libgfortran.so.1: cannot open shared object file: No such file or directory

Donc, j’essaie la deuxième solution:

apt-get install libx32gfortran3

et je ne trouve pas libgfortran.so.3 dans /usr/lib32/ ni /usr/lib:

cd /usr/lib32
ls

retourne:

gconv libgcc_s.so.1 libquadmath.so.0 libquadmath.so.0.0.0

Merci de votre aide!

la libgfortran.so.1 n’existe pas; mais le paquet libgfortran3 fournit une libgfortran.so.3; mais où se trouve donc cette libgfortran.so.3? Tout simplement dans /usr/lib/x86_64-linux-gnu et non dans /usr/lib/gcc/x86_64-linux-gnu/ .

C’est donc dans /usr/lib/x86_64-linux-gnu qu’il faut créer un lien symbolique libgfortran.so.1 qui pointe vers libgfortran.so.3 ou peut être vers libgfortran.so.3.0.0; ça sera un des deux.

https://packages.debian.org/jessie/amd64/libx32gfortran3/filelist

Ok
Merci: ça fonctionne.

étape 1

créer un lien symbolique libgfortran.so.1 dans /usr/lib/x86_64-linux-gnu qui pointe vers libgfortran.so.3 dans le même dossier.

étape 2

ajout de /usr/lib/x86_64-linux-gnu au LD_LIBRARY_PATH et export:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/
export LD_LIBRARY_PATH

Je ne sais pas si tout est indispensable (en particulier, je ne comprends pas bien ce que fait export); mais après ça, la bibliothèque libgfortran.so.1 est trouvée.

Si quelqu’un rencontre ce problème: c.f. les réponses de @anonyme2 et cette question.

pas nécessaire; mais bon ça mange pas de pain.