Nie można znaleźć -lgfortran

12

Próbuję zainstalować pakiet w R (pakiet „ks”). Błąd kończy się komunikatem o błędzie:

/usr/bin/ld: cannot find -lgfortran

Zainstalowałem już pakiet Ubuntu niezbędny do kompilacji:

sudo apt-get install build-essential

Próbowałem także dodać linki symboliczne:

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

Używam gcc i g ++ regularnie, ale nie miałem jeszcze powodu, aby używać gfortran.

Widziałem innych z tym problemem na gcc-4.7 ( http://ubuntuforums.org/showthread.php?t=2123821 ), więc zastanawiam się, czy jest to spowodowane ręczną instalacją gcc-4.7. Postępowałem zgodnie z przepisem z przyjętej odpowiedzi tutaj i tutaj tutaj .

Uruchamianie lsb_release -awydruków

Ubuntu 12.04.2 LTS

i wykonywanie uname -rwydruków

3.2.0-39-generic-pae

Czy ktoś może doradzić, dlaczego ldnie działa?

użytkownik
źródło
1
Próbowałeś utworzyć dowiązania symboliczne przeciwko bibliotekom wykonawczym , a nie tym, których linker chce (* .a lib lib). Wygląda na problem ze ścieżką.
Andrejs Cainikovs

Odpowiedzi:

5

Musisz zainstalować gfortran. Błąd wskazuje, że brakuje biblioteki statycznej dla łączenia w czasie kompilacji, a nie bibliotek dynamicznych, które próbowano dostosować.

rfindeis
źródło
Kiedy próbuję sudo apt-get install gfortran, dostaję 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.... Jakieś myśli?
użytkownik
Cóż, w moim systemie otrzymuję dpkg -S /usr/lib/gcc/x86)64-linux-gnu/4.6/libgfortran.aodpowiedź, że pochodzi ona z gfortran-4.6pakietu. Gcc szuka pliku .a. Jeśli zainstalowałeś inną wersję gcc, linker szuka wewnątrz libgfortran.a katalogu o podobnej nazwie.
rfindeis
Wygląda na prawidłową odpowiedź.
Andrejs Cainikovs
Symboliczne łączenie biblioteki 4.6 dla kompilatora 4.7 może działać. Przekazując również prawidłową ścieżkę za pomocą -L(która jest w dużej mierze taka sama). Jeśli to się nie powiedzie, musisz zainstalować wersję 4.7 gfortran z ppa użytego dla gcc 4.7. Jaką masz wersję gfortran?
rfindeis
Musiałem użyć tej samej sztuczki, co instalację gcc-4.7, aby zainstalować gfortran-4.7.
użytkownik
9

Jeszcze trochę wyjaśnienia dla odpowiedzi Cloud Olivera.

Dowiedz się, która wersja gcc jest obecnie używana za pomocą tego polecenia.

$sudo update-alternatives --config gcc

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

Wpis z *informuje, która wersja GCC jest używana. Wystarczy nacisnąć Enter, aby zachować bieżące ustawienia.

Jeśli wyświetla „brak alternatyw dla gcc”, być może będziesz musiał użyć tego polecenia, aby znaleźć wersję:

apt-cache policy gcc
  1. cd do właściwego katalogu gcc (zamień numer wersji na swój):

    cd /usr/lib/gcc/x86_64-linux-gnu/4.7/
    
  2. Możesz wyszukiwać za libgfortran.apomocą następującego polecenia (opcjonalnie). W moim przypadku był on obecny w /usr/lib/gcc/x86_64-linux-gnu/4.8/katalogu.

    find /usr/lib/gcc/x86_64-linux-gnu/ -name libgfortran.a
    
  3. Utwórz dowiązanie symboliczne:

    sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortran.a libgfortran.a
    
PeacefulDaemon
źródło
7

Co zrobiłem, sprawdzam na Ubuntu, czy wersje g ++, gcc ig są takie same, czy nie.

Myślę, że lepiej, jeśli masz wszystkie trzy w tej samej wersji.

# 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

Dla mnie rozwiązało to wszystkie problemy, z którymi miałem do czynienia podczas instalowania pakietu „TTR” w R za pomocą RStudio na Ubuntu.

Manoj Kumar
źródło
1
To jest właściwe rozwiązanie. Żadne z powyższych rozwiązań nie działało dla mnie
Yonatan Simson
1
Korzystam z gcc 6.5, ale te same metody rozwiązały problem. Co ciekawe, to samo źródło: niejasny pakiet R.
Ufos
Tak, to było najlepsze rozwiązanie, jakie mogłem wymyślić.
Manoj Kumar
4

Rozwiązanie:

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
Cloud Oliver
źródło
Czy możesz sprawić, że będzie trochę bardziej szczegółowy? Może cdprzynajmniej osobna linia?
Volker Siegel
2
Dodaj wyjaśnienie. Ludzie nigdy nie powinni ślepo wykonywać poleceń, które znajdują w Internecie. Więc proszę, też ich nie pisz.
s3lph,
Dziękuję, to rozwiązało dla mnie! W moim przypadku było cd /usr/lib/gcc/x86_64-linux-gnu/4.9.3i wtedy sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortran.a libgfortran.a
Zhubarb