Impossible de trouver -lgfortran


12

J'essaie d'installer un package en R (package "ks"). Il échoue avec un message d'erreur:

/usr/bin/ld: cannot find -lgfortran

J'ai déjà installé le paquet Ubuntu build-essential:

sudo apt-get install build-essential

J'ai également essayé d'ajouter des liens symboliques:

sudo ln -s /usr/lib/x86_64-linux-gnu/libgfortran.so.3 /usr/lib/libgfortran.so
sudo ln -s /usr/lib/libgfortran.so.3.0.0 /usr/lib/libgfortran.so
sudo ldconfig

J'utilise gcc et g ++ régulièrement, mais je n'ai pas encore eu de raison d'utiliser gfortran.

J'en ai vu d'autres avec ce problème sur gcc-4.7 ( http://ubuntuforums.org/showthread.php?t=2123821 ), donc je me demande si cela vient de l'installation manuelle de gcc-4.7. J'ai suivi la recette de la réponse acceptée ici ici et ici ici .

lsb_release -aImpressions en cours d'exécution

Ubuntu 12.04.2 LTS

et exécution d' uname -rimpressions

3.2.0-39-generic-pae

Quelqu'un peut-il offrir des conseils pour savoir pourquoi ldne fonctionne pas?


1
Vous avez essayé de créer des liens symboliques contre les bibliothèques d' exécution , pas celles que l'éditeur de liens souhaite (* .a dev libs). Ressemble au problème de chemin.
Andrejs Cainikovs

Réponses:


5

Vous devez installer gfortran. L'erreur indique que la bibliothèque statique pour la liaison au moment de la construction est manquante, pas les bibliothèques dynamiques que vous avez essayé d'ajuster.


Quand j'essaye sudo apt-get install gfortran, j'obtiens 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.... Des pensées?
utilisateur

Eh bien, sur mon système, je reçois pour dpkg -S /usr/lib/gcc/x86)64-linux-gnu/4.6/libgfortran.ala réponse que cela vient du gfortran-4.6paquet. Gcc recherche le fichier .a. Si vous avez installé une autre version de gcc, l'éditeur de liens recherche dans un répertoire du même nom pour libgfortran.a.
rfindeis

Ressemble à une réponse valide.
Andrejs Cainikovs

La liaison symbolique de la bibliothèque 4.6 pour le compilateur 4.7 peut fonctionner. En passant également le bon chemin avec -L(qui est en grande partie le même). Si cela échoue, vous devez installer la version 4.7 de gfortran à partir du ppa que vous avez utilisé pour gcc 4.7. Quelle version de gfortran avez-vous maintenant?
rfindeis du

J'avais besoin d'utiliser la même astuce que d'installer gcc-4.7 pour installer gfortran-4.7.
utilisateur

9

Un peu plus d'explication à la réponse de Cloud Oliver.

Découvrez la version de gcc actuellement utilisée via cette commande.

$sudo update-alternatives --config gcc

* 2            /usr/bin/gcc-4.7   60        manual mode

L'entrée avec *indique quelle version de GCC est utilisée. Appuyez simplement sur entrée pour conserver les paramètres actuels.

S'il affiche "aucune alternative pour gcc", vous devrez peut-être utiliser cette commande pour connaître la version:

apt-cache policy gcc
  1. cd dans le bon répertoire gcc (remplacez le numéro de version par le vôtre):

    cd /usr/lib/gcc/x86_64-linux-gnu/4.7/
    
  2. Vous pouvez rechercher libgfortran.aavec la commande suivante (facultative). Dans mon cas, il était présent dans l' /usr/lib/gcc/x86_64-linux-gnu/4.8/annuaire.

    find /usr/lib/gcc/x86_64-linux-gnu/ -name libgfortran.a
    
  3. Créez le lien symbolique:

    sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortran.a libgfortran.a
    

7

Ce que j'ai fait, je vérifie sur ubuntu si les versions de g ++, gcc et g sont identiques ou non.

Je suppose que c'est mieux si vous avez tous les trois de la même version.

# first check the versions:
gcc --version
g++ --version
gfortran --version

# If versions are different, then install:
sudo apt-get update
apt-get install gcc-4.9 g++-4.9 gfortran-4.9

Pour moi, cela a résolu tous les problèmes auxquels j'étais confronté lors de l'installation du package "TTR" dans R à l'aide de RStudio sur Ubuntu.


1
C'est la bonne solution. Aucune des solutions ci-dessus n'a fonctionné pour moi
Yonatan Simson

1
Je suis sur gcc 6.5, mais les mêmes méthodes ont résolu le problème. Fait intéressant, même source: un paquet R obscur.
Ufos

Oui, c'était la meilleure solution à laquelle je pouvais penser.
Manoj Kumar

4

Solution:

cd /usr/lib/gcc/x86_64-linux-gnu/4.6
sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortran.a libgfortran.a

Pourriez-vous le rendre un peu plus verbeux? Peut-être une cdligne séparée au moins?
Volker Siegel

2
Veuillez ajouter une explication. Les gens ne devraient jamais exécuter aveuglément les commandes qu'ils trouvent sur Internet. Veuillez donc également ne pas les écrire.
s3lph

Merci, cela l'a résolu pour moi! Dans mon cas , il était cd /usr/lib/gcc/x86_64-linux-gnu/4.9.3et sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortran.a libgfortran.a
Zhubarb
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.